我喜欢Java有一个映射,你可以在映射中定义每个条目的类型,例如<String, Integer>。

我正在寻找的是一种类型的集合,其中集合中的每个元素都是一对值。对中的每个值都可以有自己的类型(如上面的String和Integer示例),该类型在声明时定义。

该集合将保持其给定的顺序,不会将其中一个值视为唯一键(就像在映射中一样)。

本质上,我希望能够定义一个数组类型<String,Integer>或任何其他2种类型。

我意识到,我可以让一个类只有2个变量,但这似乎过于啰嗦。

我也意识到我可以使用一个2D数组,但因为我需要使用不同的类型,我必须使他们OBJECT数组,然后我必须一直强制转换。

我只需要在集合中存储对,所以每个条目只需要两个值。像这样的东西不走阶级路线就存在吗?谢谢!


当前回答

com.sun.tools.javac.util.Pair呢?

其他回答

com.sun.tools.javac.util.Pair呢?

AbstractMap。SimpleEntry

很容易你正在寻找这个:

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不是final,所以可以子类化它来公开of方法(以及前面提到的createEntry方法),从而在语法上简洁:

TupleList<java.util.Map.Entry<String,Integer>> pair = new TupleList<>();
pair.of("Not Unique key1", 1);
pair.of("Not Unique key2", 2);

Apache Crunch也有一个Pair类: http://crunch.apache.org/apidocs/0.5.0/org/apache/crunch/Pair.html

您所描述的首选解决方案是对列表(即列表)。

要做到这一点,您需要创建一个Pair类用于您的集合。这是一个可以添加到代码库的有用实用程序类。

Sun JDK中提供类似典型Pair类功能的最接近的类是AbstractMap.SimpleEntry。您可以使用这个类,而不是创建您自己的Pair类,尽管您将不得不忍受一些尴尬的限制,而且我认为大多数人会对此表示不满,因为这并不是SimpleEntry真正想要的角色。例如,SimpleEntry没有“setKey()”方法,也没有默认构造函数,所以您可能会发现它的限制太大了。

请记住,集合被设计用来包含单一类型的元素。相关的实用程序接口,比如Map,实际上并不是Collection(也就是说Map没有实现Collection接口)。Pair也不会实现Collection接口,但在构建更大的数据结构时显然是一个有用的类。

地图。条目

这些内置类也是一个选项。两者都实现了Map。输入接口。

AbstractMap。SimpleEntry AbstractMap。SimpleImmutableEntry