黑马程序员技术交流社区

标题: TreeSet集合需要覆盖hashcode和equals吗 [打印本页]

作者: Itbelong    时间: 2014-12-31 11:09
标题: TreeSet集合需要覆盖hashcode和equals吗
TreeSet集合需要覆盖hashcode和equals吗


Untitled.png (88.15 KB, 下载次数: 205)

为啥这里需要覆盖hashcode和equals方法

为啥这里需要覆盖hashcode和equals方法

作者: 常强儿    时间: 2014-12-31 11:21
set就是通过equals方法来确定set中元素的唯一性,所以放到set中的元素最好重写equals方法
而只重写equals方法,最好就要将hashcode方法也重写了,防止出现连hashcode都相等还不equals的尴尬情况

作者: 446111220    时间: 2014-12-31 11:24
楼上的好专业   好大神   吓到我了
作者: hello_csu    时间: 2014-12-31 14:47
不需要,其实Treeset是红黑树结构,其主要使用的是在插入的时候根据你提供的比较规则来插入。所以只需要实现Coparable<T>,Comparotor<T>接口的比较函数就可以。
作者: Afridoce    时间: 2014-12-31 17:54
使用的时候根据需要来定,一般情况是不需要复写的,这应该是教学时用于让学员了解其原理才复写的吧
作者: run_wind    时间: 2014-12-31 17:57
本帖最后由 run_wind 于 2014-12-31 18:00 编辑

TreeSet不会用到hashCode为什么要复写?他有自己保证元素唯一性的办法,就是二叉树。要复写compareTo(),如果有需要还要定义一个比较器。HashSet底层结构式哈希表,这时候才要用到hashcode和equals。有个不成文的规定,复写hashcode的时候一般要连equals一起复写
作者: 红楼    时间: 2014-12-31 18:10
匿名内部类和匿名对象
作者: 碎流    时间: 2014-12-31 18:22
equals 和hashCode只是超类里面的方法而已,什么样的类都可以覆写它,这就是自定的比较方法.没有一定是要哪个才可以覆写的.
作者: Itbelong    时间: 2015-1-25 10:08
hello_csu 发表于 2014-12-31 14:47
不需要,其实Treeset是红黑树结构,其主要使用的是在插入的时候根据你提供的比较规则来插入。所以只需要实 ...

懂了,谢谢
作者: Itbelong    时间: 2015-1-25 10:09
hello_csu 发表于 2014-12-31 14:47
不需要,其实Treeset是红黑树结构,其主要使用的是在插入的时候根据你提供的比较规则来插入。所以只需要实 ...

懂了,谢谢
作者: dyy8023xy    时间: 2015-7-31 00:11
好厉害的样子 。。。。谢谢我也懂了




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