gpt4 book ai didi

java - HashMap 中的 hashCode() 和键哈希

转载 作者:行者123 更新时间:2023-12-01 17:52:37 25 4
gpt4 key购买 nike

假设字符串 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com