黑马程序员技术交流社区
标题:
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