A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© H-Deka 中级黑马   /  2014-3-23 16:15  /  1130 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 H-Deka 于 2014-3-26 17:11 编辑

元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法??

3 个回复

倒序浏览
不知道你说的“必须”是什么含义。
确实应该覆盖。因为Object里的这两个方法内容对于你想操作的元素根本没什么意义,想存储自己的元素的话就应该自己去复写这俩方法。
但是不复写编译是不会报错的,没有代码上的问题。
回复 使用道具 举报
HashSet集合
1.HashSet集合中的hashCode方法和equals方法来自于Object类,为确保元素唯一性(即不重复),需要重写hashCode方法和equals方法
2.HashSet集合是先通过hashCode方法比较hashCode值,如相同,不会执行equals方法而直接认为元素相同,否则,执行equals方法。
3.HashSet集合底层实现是哈希表,为方便使用,建议重写hashCode方法和equals方法
回复 使用道具 举报
因为默认比较对象是否是使用同一个的时候,是比较对象的内存地址值,而我们有的时候对象的内容是同一样的,所以我们要想把内容是一样的对象,也认为是同一个,所以了,我们就要自己实现equals方法。并且是参数是Object obj的。因为HashSet判断的时候默认调用的是Object中的参数为Object obj的方法,如果你不是这样写的就是重载就不是覆盖了。另外还有,HashSet判断对象是否是同一个,它是判断的HashCode,HashCode 它是根据内存地址计算出来的一个值。我们在判断对象相同之后,还要让HashCode相同,这样才能避免相同内存地址的对象和相同HashCode值的对象添加到HashSet集合中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马