如何在java中比较HashMap键

  介绍

本篇文章给大家分享的是有关如何在java中比较HashMap键,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

先看一个例子

, Integer 整数=12344;   Integer 才能;integer1=12344;

在Java中整数和integer1是不相等的,但是如果再执行如下语句

map.put(整数,1);   ,map.put (integer1,, 2);

会发现2会把1覆盖,问题来了,明明是两个不同的对象,为什么,2会把1覆盖呢?
我们看HashMap中添加键的源代码,如下

如何在java中比较HashMap键

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

如何在java中比较HashMap键

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

如何在java中比较HashMap键

这里发现是相等的,都是12344年,所以我们可以很轻易的得出结论整数和integer1代表的是同一个键~,(这个结论是错的,继续往下看)
到这里还有一个问题,hashCode相等的两个对象他们的键一定是相同的吗?
先说答案不是,为什么呢?
来,我再举一个例子,先定义两个字符串的名字,name1

如何在java中比较HashMap键

然后输出他们的hashCode值

如何在java中比较HashMap键

可以看的出,这两个不同的字符串拥有相同的hashCode值,
那么我们执行如下代码

如何在java中比较HashMap键

看看他的输出结果

如何在java中比较HashMap键

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

如何在java中比较HashMap键

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

如何在java中比较HashMap键

看到这里我们明白了,为什么名字和name1hashCode值相同却是两个不同的键,因为他们进行=比较的时候不同呀,名字是“通话“,name1是“重地“,等于方法不同,自然就是同的键,
至于我们一开始举的例子,整数和integer1,他们先进行了hashCode比较,相同后再进行,等于比较,再相同才判定他们是同一个键;
这也是我们为什么常常说,为什么重写=还要重写hashCode、这两者缺一不可

java是什么

java是一门面向对象编程语言,可以编写桌面应用程序,网络应用程序,分布式系统和嵌入式系统应用程序。

以上就是如何在java中比较HashMap键,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

如何在java中比较HashMap键