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

上一篇: What is the equivalent of the C++ Pair<L,R> in Java?

下一篇: MediaElement is refusing to loop