java - 如果我们无论如何都要检查等于,为什么我们要检查散列?

标签 java hash hashmap equals

如果两个对象相等,则哈希码 必须相同。那为什么 HashMap 中的 any 检查会做 -

 if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) {

而不是简单

if ((k = e.key) == key || (key != null && key.equals(k)))) {

最佳答案

因为散列检查很便宜,而 equals() 方法调用可能很昂贵。如果哈希检查失败,我们不需要为返回 false 而进行 equals() 检查而烦恼,因此我们节省了时间。

关于java - 如果我们无论如何都要检查等于,为什么我们要检查散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19354754/

相关文章:

java - UNO纸牌游戏从手上移除纸牌

java - 使用 Scanner.nextLine() 方法的时机

ruby - 当键不存在时从 Hash#[] 返回 self(而不是 nil)

python - 构建一个可以根据其他 pd.DataFrame 功能导出新的哈希列的函数

java - 使用 HashMap 迭代器

java - 从不同类中的线程调用时不会发生重绘

java - 计算错误

security - 最好的通用摘要功能?

java - HashMap:查找下一个较低的键

java - 在java.util.HashMap中,为什么modcount不是 boolean 值?