hashcode和equals方法小记
2024-10-16 08:48:29
- 在正确的逻辑下,两个对象的hashcode一样,不代表两个对象equals;两个对象equals,则hashcode一定一样
- 在HashSet集合中,是不允许有重复的元素的,那么,set怎么才知道元素是不重复的?HashSet中会维护一张hash表,在对象存入时,会根据对象的hashcode定位到hash表中的位置,如果位置上是空的,那么该对将象直接存入hash表,如果在位置上不是空的,则进行equals比较(因为hashcode一样并不代表对象equals),equals返回true,则不存入,否则,放入hash表同个位置的链中。
- hashcode方法默认是获取对象地址值。
- 为什么jdk极力推荐重写了equals方法后再重写hashcode方法?
如果你不这么做的话程序可能和你预想要的结果会有点不一样。试想有个Student对象,有id和name两个字段,你重写其equals方法,让它根据id和name来判断两个对象是否equals,你现在要将两个相同id和name的student存入HashSet,HashSet如上所述是不允许相同元素存在的,HashSet判断到两个对象的hashcode是不相等的,直接存入了hash表中。你本来想看到的是两个对象一样,只存入一个,但是目前的结果,显然不是你想看到的。
public class Student{ private String id;
private String name;
//--getter setter---
}
所以这就是java推荐你重写equals方法后还要重写hashcode方法,这样在使用诸如HashSet和HashMap等集合时才能达到预期结果。
最新文章
- ASP.NET路由模型解析
- 使用EditText的addTextChangedListener(new TextWatcher())方法
- XMLHttpRequestUtil
- Java Socket编程(转)
- SVN在团队项目中的使用技巧:[2]Tag操作
- VC6.0到VS2013全部版本下载地址
- 【LeetCode 1】算法修炼 --- Two Sum
- 统计 p-value 含义
- ural 1057(数位dp)
- 如何添加在eclipse 中添加 window Builder
- 查看Samba用户的方法
- SQL知识点大纲图
- Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)
- C#中访问私有成员
- 实现一个ordeeddict
- e836. 设置JTabbedPane中卡片的提示语
- 【校招面试 之 C/C++】第3题 为什么要内存对齐?以及内存对齐的方式
- MOss213获得用户登录名
- 可执行文件patch技术&;&;持续更新
- leetCode之二叉树数中序遍历(递归实现)