哪个集合可用于存储项,例如键值对值?例如,我需要这样的东西:
elements.add (0, "first", 1);
elements.add(1, "second", 2);
答案 0 :(得分: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>
是它们的示例。
答案 1 :(得分: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
的方法来实现。
答案 2 :(得分: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");
的方法返回两个值的生活将变得很有趣。