黑马程序员技术交流社区
标题:
Set如何确定唯一性
[打印本页]
作者:
谷龙强
时间:
2013-7-31 09:29
标题:
Set如何确定唯一性
本帖最后由 杨兴庭 于 2013-7-31 20:26 编辑
往Set集合中添加自定义类型对象时是如何保证元素的唯一性的呢?
作者:
jialihong
时间:
2013-7-31 09:44
首先通过元素的hashCode方法,如果两个元素的hashCode值相同。
然后才会判断两个元素的内容是否相同,用的是equals方法。如果返回true。那么就视为相同元素。不进行存储。
作者:
哪颗最亮的星星
时间:
2013-7-31 09:55
首先要明确是的Set 是一个接口,不能创建实例对象,哪么就只有创建它的子类对象,最常用的有HashSet、TreeSet,如果使用HashSet的话,想要保证数据的唯一性,就要复写它的hashCode和equals方法。如果使用的是TreeSet就要实现Complarable接口的compareTo方法来保证数据的唯一性。
作者:
花心々小土豆
时间:
2013-7-31 11:09
哇!你无意间我问到一个面试题啊,记得老师当时问我HashSet是如何保证唯一性的。
我觉得Set集合是通过equals()方法来保证元素的唯一性的,我们知道集合里存放的是对象,Set集合里没有重复的元素(也就是不会出现相同的对象),当有新的元素进入集合的时候,它会和集合里的元素进行比较,如果相同就不存入,不同才添加进来。判断对象是不是相同用的就是equals()。
由于Set集合内部不同的存储形式还有其他方法辅助来确定唯一性。比如HashSet中的hashCode()方法可以减少equals()的比较次数,hashCode()值相同的元素不会太多。
作者:
の放下执著
时间:
2013-7-31 11:54
首先:集合Set是一个接口,实现它的类有那么几个,但有两个很重要:一个是HashSet,一个是TreeSet。
要问在Set集合中如何保证自定义类型对象的唯一性,那么一定要分情况说:
因为它们的底层数据结构不同:HashSet的底层数据结构是哈希表,TreeSet的底层数据结构是二叉树。
在HashSet集合中,是通过hashCode()方法与equals()方法共同作用来确定元素的唯一性的,当一个对象要进入HashSet集合中时,先判断hashCode()方法,
如果hashCode()的返回值不同,直接存入;如果相同,则继续判断equals()方法,如果equals()返回值不同,存入;如果相同,则认为重复,存不进去。
在TreeSet集合中,可以有两种方式确定元素的唯一性:一种是让要进入TreeSet的类型对象具备比较性,那么该类型变量实现Comparable接口,并复写compareTo()方法即可;一种是让集合具备比较性,可以定义一个类实现Comparator接口,并复写compare()方法,然后new一个该类对象作为参数传给TreeSet的构造函数即可。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2