黑马程序员技术交流社区

标题: 关于元素要存储到HashSet集合 [打印本页]

作者: H-Deka    时间: 2014-3-23 16:15
标题: 关于元素要存储到HashSet集合
本帖最后由 H-Deka 于 2014-3-26 17:11 编辑

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2