热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么HashMap的get()比较Java中的哈希值和键?

如何解决《为什么HashMap的get()比较Java中的哈希值和键?》经验,为你挑选了1个好方法。

我在看HashMapJDK8 的实现.在get方法中,我看到下面的行,用于查找与给定键匹配的Node.

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

为什么需要将哈希值与密钥进行比较?为什么上面的行不写为:

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

为什么这样做是否有任何解释?谢谢.



1> Max Vollmer..:

似乎导致你困惑的是两件事:

1.比较哈希值(通常非常快)比直接比较键更快.

2.在==运算符中,如果第一个条件为假,则不会检查第二个条件.

所以首先比较哈希值,这很快:

当它们不相等时,你知道键也不相等,你就完成了.

当它们相等时,您不知道键是否相等,因此您必须比较(相对)慢的键.

由于大多数键不相等,因此大多数时候您只比较哈希值.只有当键相等时(或者由于哈希冲突导致哈希值相等),您才比较键,这很少见,因此您可以获得性能优势.


注意:Javadoc for Map建议"实现可以自由地实现优化,从而避免使用equals调用,例如,首先比较两个键的哈希码."
推荐阅读
author-avatar
just_roshinn5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有