摘要:如果两个对象根据方法是不相等的,则调用这两个对象中任一个对象的方法,不要求产生不同的整数结果。
以java.lang.Object来理解JVM每new一个Object,它都会将这个Object丢到一个Hash哈希表中去,这样的话,下次做Object的比较或者取这个对象的时候,它会根据对象的hashcode再从Hash表中取这个对象。这样做的目的是提高取对象的效率。
具体过程是这样:
new Object(),JVM根据这个对象的Hashcode值放入到对应的Hash表对应的Key上,如果不同的对象却产生了相同的hash值,也就是发生了Hash key相同导致冲突的情况,那么就在这个Hash key的地方产生一个链表,将所有产生相同hashcode的对象放到这个单链表上串在一起。
比较两个对象的时候,首先根据他们的hashcode去hash表中找他的对象,当两个对象的hashcode相同,那么就是说他们这两个对象放在Hash表中的同一个key上,那么他们一定在这个key上的链表上。那么此时就只能根据Object的equal方法来比较这个对象是否equal。当两个对象的hashcode不同的话,肯定他们不能equal。
java.lang.Object中对hashCode的约定:
在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
如果两个对象根据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77812.html
摘要:介绍的作用是获取哈希码,也称为散列码它实际上是返回一个整数。所以具有相索引的对象,在该散列码位置处存在多个对象,我们必须依靠的和本身来进行区分。 1.hashCode介绍 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个散列码的作用是确定该对象在散列表中的索引位置,如果有看我的上一篇文章 什么是散列表,那么这里的散列码就相当于上文中根据首字母查...
摘要:如果根据方法得到两个对象不相同,那么两个对象的方法的结果不一定不相同,我们可以利用这一点来提高散列表的性能。最后回到文章开头的问题,如何判断两个对象或值是否相同这个问题其实有两方面的含义,一方面是判断的方法,另一方面是判断的效率。 Java中有很多场景需要判断两个对象或者两个值,那么 判断是否相同的依据是什么? 如何判断是否相同呢? 为了解释这个问题,我们从Java语言的根说起,那...
摘要:异步函数对象接口,包含和两个成员方法。哈希计数在整个的源码中都没有找到和方法的调用,这两个方法的具体作用是在原生中实现类式继承和私有属性一类的功能。 文件结构 utils/HashObject.ts文件:showImg(https://segmentfault.com/img/bVZpuq?w=642&h=472); 首先解释一下文件结构图 __extends方法 通过原型对象模拟类...
摘要:它也是用来判断两个对象是否相等,所以也得分不同的情况来说明。什么是的作用是获取哈希码,也称为散列码它返回的一个整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。它定义在的中,这就意味着中的任何类都包含有函数。 前言 万丈高楼平地起,今天的聊点基础而又经常让人忽视的话题,比如==与equals()区别?为何当我们重写完equals()后也要有必要去重写hashcode()呢? .....
阅读 1795·2021-11-18 10:02
阅读 3525·2021-11-16 11:45
阅读 1787·2021-09-10 10:51
阅读 2108·2019-08-30 15:43
阅读 1372·2019-08-30 11:23
阅读 1484·2019-08-29 11:07
阅读 1893·2019-08-23 17:05
阅读 1395·2019-08-23 16:14