equals和hashCode()
在java中,对象都继承了Object类的equals()和hashCode()方法,用于比较两个对象是否相等
如果没有重写,比较的就是内存地址,不同的对象,内存地址肯定是不同的,
如果需要根据自己的逻辑判断两个对象相等,那么就需要重写equals()和hashCode()方法
equals和hashCode的作用其实是一样的,都是用来比较两个对象是否相等的,但为什么有了equals还需要hashCode呢?
因为,equals方法一般比较的全面比较复杂,都通过equals判断的话,效率就比较低。而hashCode值需要生产hashCode值比较就可以了,效率很高,所以可以首先用hashCode判断,
但为什么hashCode效率这么高,还需要equals呢?
因为hashCode不一定准确,两个对象hashCode值相等,不能说明两个对象相等,这时候就需要进行equals判断
每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
原则:
1. equals相等,那么hashCode值一定相等 (如果hashCode值不相等,那equals一定不等,即不是相同对象)
2. hashCode相等,equals不一定相等
HashSet存:
放入对象obj
计算obj的hashCode值,和已放入对象的hashCode值是否相等,如果不想等,说明肯定是不同对象,直接放入,如果相等,再进行equals判断,相等则放入,不想等则舍弃
HashMap存取操作:
put:
首先得到hashCode值,hash算法通过hashCode值得到一个数组的index,找到对应位置,如果为null,就直接放入,如果不为null,则使用链地址法,equals方法判断这个key在链表中是否存在,如果存在,则把原有key的value替换,如果不存在,则添加
原文地址:https://www.cnblogs.com/gucl/p/11311792.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python文件操作seek()偏移量,读取指正到指定位置操作
- 使用OpenCV去除面积较小的连通域
- 使用vs code编辑调试php配置的方法
- Python OpenCV去除字母后面的杂线操作
- PDO::rollBack讲解
- PyTorch的torch.cat用法
- keras在构建LSTM模型时对变长序列的处理操作
- Discuz不使用插件实现简单的打赏功能
- Pytorch学习之torch用法—-比较操作(Comparison Ops)
- PHP里的$_GET数组介绍
- PHP中$GLOBALS与global的区别详解
- MyBatis源码解析之基础模块—Log
- 启用OPCache提高PHP程序性能的方法
- 浅谈OpenCV中的新函数connectedComponentsWithStats用法
- Python根据指定文件生成XML的方法