Java中没有Pair<L,R>,有什么好理由吗?与这个c++构造等价的是什么?我宁愿避免重新实现我自己的。
似乎1.6提供了类似的东西(AbstractMap.SimpleEntry<K,V>),但这看起来相当复杂。
Java中没有Pair<L,R>,有什么好理由吗?与这个c++构造等价的是什么?我宁愿避免重新实现我自己的。
似乎1.6提供了类似的东西(AbstractMap.SimpleEntry<K,V>),但这看起来相当复杂。
当前回答
您可以使用javafx实用程序类Pair,它的作用与c++中的Pair <>相同。https://docs.oracle.com/javafx/2/api/javafx/util/Pair.html
其他回答
许多人都张贴对代码,可用作地图中的键…如果您试图使用一对作为哈希键(常用习语),请务必查看Guava的Table<R,C,V>: http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#Table。对于图边,他们给出了下面的用法示例:
Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4);
weightedGraph.put(v1, v3, 20);
weightedGraph.put(v2, v3, 5);
weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5
Table将两个键映射到一个值,并单独为这两种类型的键提供有效的查找。我已经开始使用这个数据结构,而不是Map<Pair<K1,K2>, V>在我的代码的许多部分。有数组、树和其他用于密集和稀疏使用的实现,可以指定您自己的中间映射类。
Pair是一个很好的东西,作为一个复杂泛型的基本构造单元,例如,这是我的代码:
WeakHashMap<Pair<String, String>, String> map = ...
它和Haskell的元组是一样的
http://www.javatuples.org/index.html怎么样?我发现它非常有用。
javatuples提供了从一到十个元素的元组类:
Unit<A> (1 element)
Pair<A,B> (2 elements)
Triplet<A,B,C> (3 elements)
Quartet<A,B,C,D> (4 elements)
Quintet<A,B,C,D,E> (5 elements)
Sextet<A,B,C,D,E,F> (6 elements)
Septet<A,B,C,D,E,F,G> (7 elements)
Octet<A,B,C,D,E,F,G,H> (8 elements)
Ennead<A,B,C,D,E,F,G,H,I> (9 elements)
Decade<A,B,C,D,E,F,G,H,I,J> (10 elements)
对于Java这样的编程语言,大多数程序员用来表示类似对的数据结构的备用数据结构是两个数组,并且数据通过相同的索引访问
例如:http://www-igm.univ-mlv.fr/ lecroq /字符串/ node8.html # SECTION0080
这并不理想,因为数据应该绑定在一起,但结果也相当便宜。此外,如果你的用例需要存储坐标,那么最好构建自己的数据结构。
我的图书馆里就有这样的东西
public class Pair<First,Second>{.. }
在comp.lang.java的一个线程中。帮助,Hunter Gratzner给出了一些反对在Java中存在Pair结构的论点。主要的论点是类Pair不传递关于两个值之间关系的任何语义(您如何知道“first”和“second”的意思?)
一个更好的实践是为每个应用程序编写一个非常简单的类,就像Mike建议的那样。地图。Entry是一个在名称中包含其含义的对的例子。
总而言之,在我看来,最好有一个类Position(x,y),一个类Range(begin,end)和一个类Entry(key,value),而不是一个通用的Pair(first,second),它不告诉我它应该做什么。