检查java中的字典中是否存在元组键

时间:2015-09-01 06:11:29

标签: java dictionary tuples

我使用java.util.Hashtable创建了一个java字典,其中包含2元组的字符串作为键,int作为值。

class pair<e,f>{
  public e one;
  public f two;
}

我曾经在上面的类中初始化字典:

Dictionary<pair<String, String>, Integer> dict = new Hashtable();

现在我无法检查dict中是否存在密钥,我的意思是我无法将字符串作为参数传递给dict.containsKey()方法。

2 个答案:

答案 0 :(得分:2)

您需要为要用作Hashtable键的内容实现hashCodeequals。如果不这样做,则使用默认机制,它将使用对象标识,而不是对象相等(意味着即使两个元组包含“相等”条目,两个元组也不相等)。

关键字段应该是不可变的,否则它也会破坏事物。

答案 1 :(得分:1)

尝试这样的事情:

public class Pair<E, F> {
    private final E e;
    private final F f;
    public Pair(E e, F f) {
        this.e = e;
        this.f = f;
    }

    public E getE() {
        return e;
    }
    public F getF() {
        return f;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Pair<E,F> other = (Pair<E,F>) obj;
        if (!this.e.equals(other.getE())) {
           return false;
        }
        if (!this.f.equals(other.getF())) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        hash = 53 * e.hashCode() + f.hashCode();
        return hash;
    }
}

我认为ef不是null。如果它可以是null,那么您必须在e == null之前检查if(e.equals(other.getE())是否阻止了NPE。

补充说明: