Java中的C ++ Pair <L,R>等价于什么?
为什么在Java中没有Pair<L,R>
是否有充分的理由? 什么是这个C ++构造的等价物? 我宁愿避免重新实现我自己的。
似乎1.6提供了类似的东西( AbstractMap.SimpleEntry<K,V>
),但这看起来相当复杂。
在comp.lang.java.help
一个线程中,Hunter Gratzner给出了一些反对在Java中使用Pair
构造的论点。 主要的观点是,类Pair
没有传达关于两个值之间关系的任何语义(你怎么知道“第一”和“第二”是什么意思?)。
一个更好的做法是写一个非常简单的类,就像Mike提出的那样,对于每个应用程序来说,你会对Pair
类做出一个类。 Map.Entry
是一个以它的名字携带其含义的对的例子。
总而言之,在我看来,最好有一个类Position(x,y)
,一个Range(begin,end)
类Range(begin,end)
和一个Entry(key,value)
类Entry(key,value)
而不是一个通用Pair(first,second)
不告诉我任何关于它应该做的事情。
这是Java。 您必须使用描述性类和字段名称来创建自己的定制Pair类,并且不要介意通过编写hashCode()/ equals()或一次又一次实现Comparable来重新发明轮子。
HashMap兼容配对类:
public class Pair<A, B> {
private A first;
private B second;
public Pair(A first, B second) {
super();
this.first = first;
this.second = second;
}
public int hashCode() {
int hashFirst = first != null ? first.hashCode() : 0;
int hashSecond = second != null ? second.hashCode() : 0;
return (hashFirst + hashSecond) * hashSecond + hashFirst;
}
public boolean equals(Object other) {
if (other instanceof Pair) {
Pair otherPair = (Pair) other;
return
(( this.first == otherPair.first ||
( this.first != null && otherPair.first != null &&
this.first.equals(otherPair.first))) &&
( this.second == otherPair.second ||
( this.second != null && otherPair.second != null &&
this.second.equals(otherPair.second))) );
}
return false;
}
public String toString()
{
return "(" + first + ", " + second + ")";
}
public A getFirst() {
return first;
}
public void setFirst(A first) {
this.first = first;
}
public B getSecond() {
return second;
}
public void setSecond(B second) {
this.second = second;
}
}
链接地址: http://www.djcxy.com/p/41799.html