发信息做推广,我选黔优网

发布产品信息
微信公众号

Java中HashMap键是进行比较的?具体示例解析

我要举报 来源:黔优网作者:小优 责编:小优 时间:2024-12-18 13:50:31 浏览量:20
导读:本文深度解析Java中HashMap键是进行比较的?具体示例解析的核心底层逻辑要点与实践方法,涵盖关键观点信息和常见问题解决思路分析,为您提供全面的学习指导,一起来看看吧。

HashMap是当前Java面试中最经常遇到的面试题,而且大部分都会问及其底层原理以及具体实现。下面,我将和大家分享关于HashMap键在Java中是如何进行比较的,用详细的事例来解析具体的使用方式。

先看一个例子

Integer integer=12344;
Integer integer1=12344;

在Java中Integer 和Integer1是不相等的,但是如果再执行如下语句

map.put(integer, 1); map.put(integer1, 2);

会发现2会把1覆盖,问题来了,明明是两个不同的对象,为什么,2会把1覆盖呢?

我们看HashMap中添加键的源代码,如下

可以发现我们传进来的键交给了一个hash的成员方法区处理,这里我们看看hash方法的源码

哦,看到这里明白了,我们传进来的键会执行hashCode方法,那么到这里我们明白了,原来,HashMap判断两个键是否相等是看他们的hashCode

是否相等,

那我们看看上面说的integer和integer1的hashCode是否相等

这里发现是相等的,都是12344,所以我们可以很轻易的得出结论integer和integer1代表的是同一个键~,(这个结论是错的,继续往下看)

到这里还有一个问题,hashCode相等的两个对象他们的键一定是相同的吗?

先说答案不是,为什么呢?

来,我再举一个例子,先定义两个字符串name,name1

然后输出他们的hashCode值

可以看出,这两个不同的字符串拥有相同的hashCode值,

那么我们执行如下代码

看看他的输出结果

嗯?怎么会这样?我们定义的两个字符串明明hashCode值相同,按理来说,他们在HashMap中应该是同一个键才对,为什么会是两个不同的键?

我们再回过头看HashMap中的put方法

发现他调用了一个叫putVal得方法我们点进去看看

看到这里我们明白了,为什么name和name1hashCode值相同却是两个不同的键,因为他们进行equals比较的时候不同呀,name是"通话",name1是"重地",equals方法不同,自然就是同的键,

至于我们一开始举的例子,integer和integer1,他们先进行了hashCode比较,相同后再进行,equals比较,再相同才判定他们是同一个键;

这也是我们为什么常常说,为什么重写equals还要重写hashcode,这两者缺一不可

到此这篇关于 Java 中 HashMap 键是如何进行比较方式的介绍到这就结束了,想要了解更多相关 Java HashMap 其他内容请搜索W3Cschool以前的文章或继续浏览下面的相关文章,也希望大家以后多多支持我们!

 
  • 下一篇: Google和Facebook:两大科技巨头的霸主之争
  • 上一篇: 如何提升您的在线业务——大连Google推广的关键
 
没用 0举报 收藏 0评论 0
免责声明:
以上展示内容来源于用户自主上传及公开网络信息收集整理,版权归属原作者所有,平台不承担内容准确性责任,版权争议与本站无关。本文涉及见解与观点不代表黔优网官方立场,仅供技术交流参考,黔优网为纯技术资讯交流平台,不参与任何商业服务及交易行为,所有企业信息均经基础资质审核后展示。本文标题:Java中HashMap键是进行比较的?具体示例解析,本文链接:https://www.qianu.com/n/933807.html,欢迎转载,转载时请说明出处。若您发现本文涉及版权争议或违法违规内容,请您立即通过点此【投诉举报】并提供有效线索,也可以通过邮件(邮箱号:kefu@qianu.com)联系我们及时修正或删除。
 
 

 

 
推荐图文资讯