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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

SET 关闭

© 张海洋 中级黑马   /  2013-4-9 17:16  /  1581 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

4 个回复

倒序浏览
在Object里有个equals方法,重写它已达到区分重复与否问题。equals比较的是内容,==比较的是引用
回复 使用道具 举报
必须在对象中重写equals方法和hashcode方法
回复 使用道具 举报
对于hashset集合来说 底层结构是哈希表,使用hashcode和equals去保证其元素一致,当hashcode一致时候,才使用equals方法,对于treeset来说,底层是二叉树结构,使用compareto方法比较,元素必须实现comparable接口,与其它函数无关,只要比较一致就是不再存储
回复 使用道具 举报
==比较的是地址,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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马