黑马程序员技术交流社区

标题: SET [打印本页]

作者: 张海洋    时间: 2013-4-9 17:16
标题: SET
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
作者: 梁航斌    时间: 2013-4-9 17:45
在Object里有个equals方法,重写它已达到区分重复与否问题。equals比较的是内容,==比较的是引用
作者: 谭威    时间: 2013-4-9 18:00
必须在对象中重写equals方法和hashcode方法
作者: 王大斌    时间: 2013-4-9 18:40
对于hashset集合来说 底层结构是哈希表,使用hashcode和equals去保证其元素一致,当hashcode一致时候,才使用equals方法,对于treeset来说,底层是二叉树结构,使用compareto方法比较,元素必须实现comparable接口,与其它函数无关,只要比较一致就是不再存储
作者: 蓝色骨头    时间: 2013-4-9 18:44
==比较的是地址,Object中的equals使用的就是==,通常我们要重写equals
Set
Set 接口继承 Collection 接口,而且它不允许集合中存在重复项。所有原始方法都是现成的,没有引入新方法。具体的 Set 实现类依赖添加的对象的 equals() 方法来检查等同性。

Hashset
hashcode用于使用哈希表存储对象的集合
向这种集合时加入对象首先计算对象的hashcode(使用hashcode方法),每个hashcode对应一个存储空间(每个存储空间可以存放多个元素),加入元素时,会沿着存储空间的第一个元素开始比较(使用equals方法),直到存储空间的最后一个元素,如果没有相同的元素,就加入,否则返回false。
equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

Treeset
TreeSet则是对我们的Set中的元素进行有序存放,数据结构式红黑树,当要从集合中以有序的方式抽取元素时,实现就会有用处。为了能顺利进行,添加到 TreeSet 的元素必须是可排序的。TreeSet 实例使用它的 compareTo(或 compare)方法对所有元素进行比较,所以加入TreeSet 的对象的类必须实现 compareTo(或 compare)或者为TreeSet 指定比较器Comparator






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