java - HashMap的Node中存储hash的目的是什么?

标签 java data-structures

static class Node implements Map.Entry {
      final int hash;
      final K key;
      V value;
      Node next;

}

java中HashMap的内部实现中,Node存储的是hash。

为什么使用它?我认为没有必要这样做。

最佳答案

我认为主要原因是为了提高性能。对于某些对象来说,调用equals() 的成本可能很高。在Short-circuit evaluation的帮助下,如果哈希值尚未匹配,jvm 不必调用 equals()

这就是 getNode 的实现方式(在迭代存储桶来搜索节点时调用。

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

//( Same HashCode AND ((Same Object reference of the Key) OR (equal method says True in Key Object) )

编辑:正如@moreON提到的,重新散列也需要散列

关于java - HashMap的Node中存储hash的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58003674/

相关文章:

java - Akka Remote以及通过自定义反序列化拦截未知类

ant - 如何使用 ant 构建 JavaME jar?我可以在 javaSE 中运行吗?

java - 如何根据用户输入声明变量?

c - 非常简单的哈希表查询

c++ - 反向链表导致循环

java - 使用枚举来清晰地表示错误消息——这是好的做法吗?

java - 在这种情况下,我选择组合而不是继承是正确的吗?

go - 如何在 Go 中嵌入和覆盖结构

c - 如何在单链表的开头添加节点?

java - Hadoop分布式缓存