HashTable类的包含问题

时间:2015-12-22 10:43:13

标签: java hashmap hashtable equals contains

我遇到了Hashtable类的问题。我有一个实现方法等于的类TmpClass。然后我创建了一个Hashtable,并且在我的预定义equals方法下,两个TmpClass对象相等。然后我把对象作为Hashtable中的一个键。 但是,当我测试第二个对象是否实际包含在Hashtable中时,结果为" false" ...

这是我的主要方法。

    public static void main(String[] args){
    Hashtable<TmpClass, Integer> list = new Hashtable<TmpClass, Integer>();
    TmpClass v1 = new TmpClass(1);
    list.put(v1, 1);

    TmpClass v2 = new TmpClass(1);

    if(v2.equals(v1))
        System.out.println("Equals");
    else System.out.println("Not equal");

    if(list.containsKey(v2))
        System.out.println("Contains");
    else System.out.println("Not contain");
}

这是我的TmpClass。

public class TmpClass {
private int val;

public TmpClass(int v){
    val = v;
}

public boolean equals(Object o){
    if(o instanceof TmpClass){
        return val == ((TmpClass) o).val;
    }
    else return false;
}
}

在javadoc中清楚地写出,方法包含Hashtable的键使用Object类的equals方法来比较键。有人解释为什么这里不满足继承属性?或者有人有另一种方法来解决这个问题吗?

这对我很有帮助。感谢。

2 个答案:

答案 0 :(得分:1)

您还必须实现哈希码方法,作为hashcode equals contract的一部分。它也在Hastable spec

中说明
  

要成功存储和检索哈希表中的对象,用作键的对象必须实现hashCode方法和equals方法。

答案 1 :(得分:1)

实施Ext.panel.Panel是不够的。

要将您的班级用作equals中的密钥,您还必须实施Map

这是一个例子:

hashCode