我遇到了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方法来比较键。有人解释为什么这里不满足继承属性?或者有人有另一种方法来解决这个问题吗?
这对我很有帮助。感谢。
答案 0 :(得分:1)
您还必须实现哈希码方法,作为hashcode equals contract的一部分。它也在Hastable spec:
中说明要成功存储和检索哈希表中的对象,用作键的对象必须实现hashCode方法和equals方法。
答案 1 :(得分:1)
实施Ext.panel.Panel
是不够的。
要将您的班级用作equals
中的密钥,您还必须实施Map
。
这是一个例子:
hashCode