首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >值对的Java集合?(元组?)

值对的Java集合?(元组?)
EN

Stack Overflow用户
提问于 2009-02-07 01:07:54
回答 16查看 561.6K关注 0票数 391

我喜欢Java有一个map,您可以在其中定义Map中每个条目的类型,例如<String, Integer>

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

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

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

我意识到我可以创建一个只有两个变量的类,但这似乎过于冗长。

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

我只需要在集合中存储对,因此每个条目只需要两个值。这样的东西在没有类路由的情况下还存在吗?谢谢!

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-02-06 17:24:27

Pair类是那些"gimme“泛型示例之一,可以很容易地自己编写。例如,在我的头顶上:

代码语言:javascript
复制
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());
  }

}

是的,它存在于网络上的多个地方,具有不同程度的完整性和特性。(我上面的例子是不变的。)

票数 274
EN

Stack Overflow用户

发布于 2012-06-29 06:17:36

AbstractMap.SimpleEntry

简单地说,您正在寻找以下内容:

代码语言:javascript
复制
java.util.List<java.util.Map.Entry<String,Integer>> pairList= new java.util.ArrayList<>();

你怎么能填满它?

代码语言:javascript
复制
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);

这可以简化为:

代码语言:javascript
复制
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方法的帮助下,可以进一步减少冗长以:

代码语言:javascript
复制
pairList.add(createEntry("Not Unique key1", 1));
pairList.add(createEntry("Not Unique key2", 2));

由于ArrayList不是最终的,因此可以对其进行子类化以公开of方法(以及前面提到的createEntry方法),从而在语法上简洁:

代码语言:javascript
复制
TupleList<java.util.Map.Entry<String,Integer>> pair = new TupleList<>();
pair.of("Not Unique key1", 1);
pair.of("Not Unique key2", 2);
票数 323
EN

Stack Overflow用户

发布于 2012-12-12 07:56:07

Apache lang3具有Pair类和在此线程What is the equivalent of the C++ Pair in Java?中提到的少数其他库

与原始问题中的要求相匹配的示例:

代码语言:javascript
复制
List<Pair<String, Integer>> myPairs = new ArrayList<Pair<String, Integer>>();
myPairs.add(Pair.of("val1", 11));
myPairs.add(Pair.of("val2", 17));

//...

for(Pair<String, Integer> pair : myPairs) {
  //following two lines are equivalent... whichever is easier for you...
  System.out.println(pair.getLeft() + ": " + pair.getRight());
  System.out.println(pair.getKey() + ": " + pair.getValue());
}
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/521171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档