哪个集合可用于存储项目,例如键值?例如,我需要这样的东西:
elements.add (0, "first", 1);
elements.add(1, "second", 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());
}
}
你问了一个Collection
。 TripleList
实际上不是Collection
,因为它没有实施Collection
。但这应该可以通过委托内部列表triples
的方法来实现。
您应该定义自己的类来定义值,并使用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>
就是它们的示例。
如果您使用的是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");
从方法中返回两个值