假设字符串 A = "c"
,字符 B = 'c'
。
我明白 A.hashCode() == B.hashCode()
但 A.equals(B) == false
。
但是,如果将 A
作为键放入 HashMap
中。然后调用 hashMap.contains(B)
返回 false,尽管它们具有相同的 hashCode
。下面是Java如何实现HashMap
中的一些功能。
public boolean containsKey(Object key) {
return getNode(hash(key), key) != null;
}
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
如您所见,HashMap
仅对键的 hashCode()
进行操作。那么为什么 contains()
会返回 false
呢?
最佳答案
第一个 A.equals(B)
为 false 而且 String.equals(Object o)
有此代码
if (anObject instanceof String) {
//comparing strings
}
return false;
此外,containsKey()
调用 getNode()
,它使用 equals
来区分相等的对象和具有相同 hashCode 的对象(哈希冲突)。
关于java - HashMap 中的 hashCode() 和键哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48312832/