Java 哈希表类的包含问题
我对Hashtable类有一个问题。我有一个类TmpClass实现了一个方法equals。然后我创建一个哈希表,在我的predifined equals方法下,TmpClass的两个对象相等。然后我将对象的名称作为键放入哈希表中。 但是当我测试第二个对象是否真的包含在哈希表中时,结果是“false” 这是我的主要方法Java 哈希表类的包含问题,java,hashmap,hashtable,equals,contains,Java,Hashmap,Hashtable,Equals,Contains,我对Hashtable类有一个问题。我有一个类TmpClass实现了一个方法equals。然后我创建一个哈希表,在我的predifined equals方法下,TmpClass的两个对象相等。然后我将对象的名称作为键放入哈希表中。 但是当我测试第二个对象是否真的包含在哈希表中时,结果是“false” 这是我的主要方法 public static void main(String[] args){ Hashtable<TmpClass, Integer> list =
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");
}
javadoc中清楚地写到,Hashtable的containsKey方法使用Object类的方法equals来比较键。有人能解释为什么继承财产在这里不能得到满足吗?还是有人有别的办法来解决这个问题
这将对我很有帮助。谢谢。您还必须实现hashcode方法,作为测试的一部分。此外,还规定: 要成功地从哈希表存储和检索对象,用作键的对象必须实现hashCode方法和equals方法
仅实现
等于是不够的
为了将类用作映射中的键
,还必须实现hashCode
以下是一个例子:
@Override
public int hashCode() {
return Integer.valueOf(val).hashCode();
}
可能与HashTable的containsKey()代码重复:if((e.hash==hash)和&e.key.equals(key))。
@Override
public int hashCode() {
return Integer.valueOf(val).hashCode();
}