• 在正确的逻辑下,两个对象的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等集合时才能达到预期结果。

最新文章

  1. ASP.NET路由模型解析
  2. 使用EditText的addTextChangedListener(new TextWatcher())方法
  3. XMLHttpRequestUtil
  4. Java Socket编程(转)
  5. SVN在团队项目中的使用技巧:[2]Tag操作
  6. VC6.0到VS2013全部版本下载地址
  7. 【LeetCode 1】算法修炼 --- Two Sum
  8. 统计 p-value 含义
  9. ural 1057(数位dp)
  10. 如何添加在eclipse 中添加 window Builder
  11. 查看Samba用户的方法
  12. SQL知识点大纲图
  13. Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)
  14. C#中访问私有成员
  15. 实现一个ordeeddict
  16. e836. 设置JTabbedPane中卡片的提示语
  17. 【校招面试 之 C/C++】第3题 为什么要内存对齐?以及内存对齐的方式
  18. MOss213获得用户登录名
  19. 可执行文件patch技术&&持续更新
  20. leetCode之二叉树数中序遍历(递归实现)

热门文章

  1. php curl使用总结(一)
  2. 堆优化dijkstra
  3. Win7多用户同时登陆
  4. 虚拟dom和真实dom的转化和class解析的顺序
  5. 树梅派(Raspberry Pi 3b)安装kali linux 2.0
  6. 基于Select模型通信程序的编写,编译和执行
  7. Linux常见文件管理命令
  8. php-5.6.26源代码 - opcode处理器,“乘法opcode”处理器
  9. mysql 按值排序
  10. 数据分析处理库Pandas——数值运算