用于存储键值等元素的集合

问题描述 投票:1回答:3

哪个集合可用于存储项目,例如键值?例如,我需要这样的东西:

  elements.add (0, "first", 1);
  elements.add(1, "second", 2);
java collections
3个回答
2
投票

定义一个类Triple,它将采用三个参数。

public class Triple<K, V1, V2> {

  private K key;
  private V1 value1;
  private V2 value2;

  public Triple(K a, V1 value1, V2 value2) {
    this.key = a;
    this.value1 = value1;
    this.value2 = value2;
  }

  public K getKey() {
    return key;
  }

  public V1 getValue1() {
    return value1;
  }

  public V2 getValue2() {
    return value2;
  }
}

然后添加另一个类TripleList,它将作为一个集合,您可以在其中添加Triple的实例:

  public  class TripleList<K, V1, V2> implements Iterable<Triple<K, V1, V2>> {

    private List<Triple<K, V1, V2>> triples = new ArrayList<>();

    public void add(K key, V1 value1, V2 value2) {
      triples.add(new Triple<>(key, value1, value2));
    }

    @Override
    public Iterator<Triple<K, V1, V2>> iterator() {
      return triples.iterator();
    }
  }

使用它们可以执行以下操作:

  public static void main(String[] args) {
    List<Triple<Integer, String, Integer>> list = new ArrayList<>();
    list.add(new Triple<Integer, String, Integer>(0, "first", 1));
    list.add(new Triple<Integer, String, Integer>(1, "second", 2));

    TripleList<Integer, String, Integer> elements = new TripleList<>();
    elements.add(0, "first", 1);
    elements.add(1, "second", 2);

    for (Triple<Integer, String, Integer> triple : elements) {
       System.out.println(triple.getKey() + "," + triple.getValue1() + "," + triple.getValue2());  
    }
  }

你问了一个CollectionTripleList实际上不是Collection,因为它没有实施Collection。但这应该可以通过委托内部列表triples的方法来实现。


4
投票

您应该定义自己的类来定义值,并使用Map<Integer, MyValue>作为整体结构。

示例:

public class MyValue{
    public MyValue(String string, int i){
       ...
    }
}

并使用它:

Map<Integer, MyValue> elements = new HashMap<>();
elements.put(0, new MyValue("first", 1));

您可以选择List作为值,但通用List依赖于特定类型,如List<String>List<Integer>。所以在你的情况下,我会避免这种方式,因为你在值中混合类型。

您还有其他不需要引入自定义类的替代方法,但一般情况下,对于必须读取/维护代码的人来说,这通常不明确:javafx.util.Pair<K,V>java.util.AbstractMap.SimpleImmutableEntry<K, V>就是它们的示例。


2
投票

如果您使用的是JDK9

Map<Integer,Map.Entry<String,Integer>> map=new HashMap<>();

现在,您可以使用Map界面中的静态方法条目(K k,V v)创建Map.Entry https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#entry-K-V-

对于java程序员来说,生活将很有趣,可以使用return Map.entry("firstValue","secondValue");从方法中返回两个值

© www.soinside.com 2019 - 2024. All rights reserved.