我喜欢Java具有Map的方式,例如,你可以在其中定义地图中每个条目的类型<String, Integer>。
<String, Integer>
我正在寻找的是一种类型的集合,其中集合中的每个元素都是一对值。该对中的每个值都可以具有自己的类型(如上面的String and Integer示例),该类型在声明时定义。
集合将保持其给定顺序,并且不会将值之一视为唯一键(如在地图中)。
从本质上讲,我希望能够定义类型<String,Integer>或任何其他2种类型的ARRAY 。
<String,Integer>
我意识到我可以创建一个只包含2个变量的类,但这似乎太冗长了。
我也意识到我可以使用2D数组,但是由于需要使用不同的类型,因此必须将它们制成OBJECT数组,然后我必须一直进行转换。
我只需要在集合中存储对,因此每个条目只需要两个值。如果不走上课路线,是否存在这样的东西?谢谢!
Pair类是这些“大型”泛型示例之一,很容易自己编写。例如,离开我的头顶:
public class Pair<L,R> { private final L left; private final R right; public Pair(L left, R right) { assert left != null; assert right != null; this.left = left; this.right = right; } public L getLeft() { return left; } public R getRight() { return right; } @Override public int hashCode() { return left.hashCode() ^ right.hashCode(); } @Override public boolean equals(Object o) { if (!(o instanceof Pair)) return false; Pair pairo = (Pair) o; return this.left.equals(pairo.getLeft()) && this.right.equals(pairo.getRight()); } }
是的,它存在于网络上的多个位置,具有不同程度的完整性和功能。(我上面的示例旨在保持不变。)
很容易,你正在寻找这个:
java.util.List<java.util.Map.Entry<String,Integer>> pairList= new java.util.ArrayList<>();
你怎么填充它?
java.util.Map.Entry<String,Integer> pair1=new java.util.AbstractMap.SimpleEntry<>("Not Unique key1",1); java.util.Map.Entry<String,Integer> pair2=new java.util.AbstractMap.SimpleEntry<>("Not Unique key2",2); pairList.add(pair1); pairList.add(pair2);
简化为:
Entry<String,Integer> pair1=new SimpleEntry<>("Not Unique key1",1); Entry<String,Integer> pair2=new SimpleEntry<>("Not Unique key2",2); pairList.add(pair1); pairList.add(pair2);
并且,借助一种createEntry方法,可以进一步将冗长程度降低为:
pairList.add(createEntry("Not Unique key1", 1)); pairList.add(createEntry("Not Unique key2", 2));
由于ArrayList不是最终的,因此可以将其子类化以公开一个of方法(和上述createEntry方法),从而使语法简洁:
TupleList<java.util.Map.Entry<String,Integer>> pair = new TupleList<>(); pair.of("Not Unique key1", 1); pair.of("Not Unique key2", 2);