首页 > 其他分享 >HashCode的意义和作用

HashCode的意义和作用

时间:2024-02-01 09:12:10浏览次数:24  
标签:相等 两个 意义 对象 equals hashCode HashCode 作用

HashCode的介绍

哈希码是按照某种规则生成的int类型的数值 哈希码并不是完全唯一的。 让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不是说不同的对象哈希码就一定不同,也有相同的情况。 首先我们需要了解hashCode方法和equals方法两个重要的规范:

规范1

若重写了某个类的equals方法,请一定重写hashCode方法,要能保证通过equals方法判断为true的两个对象,其hashCode方法的返回值相等,换句话说,就是要保证”两个对象相等,其hashCode一定相同”始终成立;

规范2

若equals方法返回false,即两个对象不相等,并不要求这两个对象的hashCode得到不同的数; 在这些规范下才能得到如下推论:
  1. 两个对象相等,其HashCode一定相同;
  2. 两个对象不相等,其HashCode有可能相同;
  3. HashCode相同的两个对象,不一定相等;
  4. HashCode不相同的两个对象,一定不相等;
关于第四条推论,有人可能会举出反例:两个类的hashCode方法故意返回不同的值,其对应的equals方法始终返回true,但这意味他们生成的对象和其他任意对象均会相等,其次是违反了规范1,所以反例是无效的。   这个只是规范,违反并不会造成编译或运行时的错误,但会在存储一些集合中时造成潜在的bug,因为有些集合会首先根据hashCode来判断是否重复。

HashCode的意义

HashMap插入重复的key,HashSet插入重复的value,,其value会被覆盖掉,那么,就有一个问题,他们怎么来判断重复呢?假设数据量庞大,每次插入要进行的判断重复操作就会非常耗时。 据了解,他们判断两个对象是否相等的规则是:   1)首先判断两个对象的hashCode是否相等 如果不相等,认为两个对象也不相等,完毕 如果相等,转入2)   2)判断两个对象用equals运算是否相等 如果不相等,认为两个对象也不相等 如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)   由此判断方式可知,如果你违反了规范1,致使出现两个对象相等,但其hashCode不等的情况,这些集合会认为是两个不同对象,从而不会覆盖,造成问题。

标签:相等,两个,意义,对象,equals,hashCode,HashCode,作用
From: https://www.cnblogs.com/guangzhiruijie/p/18000500

相关文章

  • scope / 作用域(C变量的作用域)
    scope/作用域(C变量的作用域)参考:CPrimerPlus第6版第12章存储类别、链接和内存管理目录scope/作用域(C变量的作用域)1.定义2.分类2.1.blockscope/块作用域2.1.1.定义2.1.2.函数的形式参数2.1.3.没有花括号的块2.2.functionscope/函数作用域2.3.functionprot......
  • 为什么要过苹果MFI认证?MFI认证有什么作用?
    MFi是英文“MadeforiPhone/iPod/iPad”的缩写,是苹果公司对其授权配件厂商生产的外置配件的一种标识使用许可,即指连接苹果的iPhone、iPod、iPad的电子配件,如数据线、充电器等,这些配件获得苹果官方的授权和认证,以此来满足苹果的iPhone、iPod、iPad等产品的性能标准,所以MFi也俗称为......
  • 异步转同步有什么意义
    异步转同步有什么意义,直接使用同步方法不好吗?一直有这个疑问,使用异步转同步就高端,直接使用同步方法一个一个直接就low,一直不理解,难道不是炫技的同时增加代码复杂度吗后来gpt4给了我答案使用CompletableFuture.supplyAsync提交异步任务然后通过CompletableFuture.get()阻塞......
  • 万界星空科技可视化数据大屏的作用
    随着科技的不断发展和进步,当前各种数据化的设备也是如同雨后春笋般冒了出来,并且其可以说是给我们带来了极大的便利的。在这其中,数据大屏就是非常具有代表性的一个例子。数据大屏的主要作用包括:数据分析:数据大屏能够将大量数据以图表、表格等多种形式展示,帮助人们直观地了解数据及其......
  • 工作的意义是什么?
    员工就是个物品,什么经验、能力、学习,那不都是明码标价的吗?公司花钱去购买你的时间去创造价值,你没有价值就换呗,暂时离不开你那公司就再等一等。找到性价比更高的再把你替换掉,这就是事实。所以如果你是一个普通的打工人,对待工作要清醒点,不要玻璃心,更不要投入更多的感情,也不要去委......
  • python中设置cudnn作用理解
     1、cudnn的简介cuDNN(CUDADeepNeuralNetworklibrary):是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。如果你要用GPU训练模型,cuDNN不是必须的,但是一般会采用这个加速库。2、torch.backends.cudnn的理解 cuDNN使用非确定性算法,并且可以使用to......
  • vue3 在 TypeScript 文件中,const route = useRoute();route undefined 不能在顶层作用
    ts文件内部不能使用import{useRoute}from'vue-router';constroute=useRoute();routeundefined在TypeScript文件中,不能在顶层作用域内使用Vue组件的Hooks函数,例如useRoute。Hooks函数只能在Vue组件中使用。如果你想在TypeScript文件中获取当前路由信息,你可......
  • Java并发基础:一文讲清util.concurrent包的作用
    java.util.concurrent包是Java中用于并发编程的重要工具集,提供了线程池、原子变量、并发集合、同步工具类、阻塞队列等一系列高级并发工具类,使用这些工具类可以极大地简化并发编程的难度,减少出错的可能性,提高程序的效率和可维护性。官方文档地址:https://docx.iamqiang.com/jd......
  • BOSHIDA DC电源模块在智能家居中的作用与发展潜力
    BOSHIDADC电源模块在智能家居中的作用与发展潜力DC电源模块在智能家居中的作用是为智能设备提供稳定的直流电源。智能家居中的设备通常使用低压直流电源,例如5V或12V,而传统的交流电源需要通过适配器将交流电转换成直流电。使用DC电源模块可以直接为智能设备提供所需的直流电源,省......
  • (转)Java中equals和==、hashcode的区别
    https://www.cnblogs.com/lixuwu/p/5676207.htmlhttps://www.cnblogs.com/lixuwu/p/10662234.htmlhttps://timzhouyes.github.io/2020/02/27/Java%E7%89%B9%E7%A7%8D%E5%85%B5/https://blog.csdn.net/a745233700/article/details/83186808https://www.cnblogs.com/dolphin......