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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘涛 黑马帝   /  2011-11-25 09:29  /  3602 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘涛 于 2011-11-28 18:13 编辑

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

4 个回复

倒序浏览
Set判断两个对象相同不是使用==运算符,而是根据equals方法。只要两个对象用equals方法比较返回true,Set就不会接受这两个对象;反之,只要两个对象用equals方法比较返回false,Set就会接受这两个对象。
Set的实现类HashSet会调用对象的hashCode()方法来得到该对象的hashCode值,然后根据该HashCode值来决定该对象在HashSet中存储位置。
注意:如果有两个元素通过equals方法比较返回true,但它们的hashCode()方法返回值不相等,HashSet将会把它们存储在不同位置,也就可以添加成功。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
是先使用hashcode方法,再使用equals方法。
hashcode的作用就是为了比较两个对象是否相等。Set集合有消除重复的功能,其去重的功能就是依靠了hashcode。
个人理解:Set集合会判断两个元素的hashcode是否相同,相同的话就去掉一个,不相同就会使用equals()方法比较。
所以只有有消除重复功能的集合(hash集合)才会用得着hashcode。所以说hashcode一般只应用在hash集合中,才有价值。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
set的两个子类 HashSet和TreeSet
HashSet是通过先比较HashCode再比较equals方法来判断的
TreeSet
1):元素自身具备比较性;那么,集合中所存储的类必须实现comparble接口,并重写接口中的compareTo()方法。这种方法return值为整数;
2):当元素自身不具备比较性(更确切的说是我们无法让所存储的类实现comparble接口,例如,从数据库中得到的数据类型)或者是该类所实现的compareTo()方法并非我们所期望的时(String类型,默认是按字典顺序进行比较的),那么我们就要考虑所集合自身具备比较性.java为我们提供了一个带比较器的参数的构造函数,以做到这一点。TreeMap(Comparator<? super K> comparator)Comparator是一接口,它里面有两个方面compare()和equals(),当我们要实现这个接口时,只需重写compare()方法即可,它的返回值类型也为int型。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

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