黑马程序员技术交流社区

标题: 有关set集合 [打印本页]

作者: 549208564    时间: 2016-1-25 23:21
标题: 有关set集合
继承set接口的集合都是元素不重覆的吗?那又是怎样保证元素的唯一性的呢?

希望大神能详细的说明一下,都忘的差不多了。。。
作者: rushing    时间: 2016-1-25 23:24
怎么没人说呢
作者: 谁的苍茫    时间: 2016-2-16 15:44
这涉及到set集合里的底层数据结构,像TreeSet是二叉树数据结构,HashSet是哈希表结构,哈希表底层依赖两个方法:hashCode()和equals(),首先比较哈希值是否相同,如果相同就执行equals()方法,判断是否是相同的元素,重复的元素就不会添加,而TreeSet是红黑树(是一个自平衡的二叉树),元素进入集合的时候,把第一个元素作为根节点,之后添加的元素,就跟根节点比较,大的就放在右边,小的就放在左边,相等的就不添加
作者: 孟茹    时间: 2016-2-16 18:13
set集合保证元素唯一性,你要看是什么元素,但是简单说,hashSet保证元素唯一性靠的就是底层的hash表和equlas方法,因为hashset底层是hash表结构,之前学过数据结构的人都知道的;而treeset就像上面所说底层是二叉树结构,二叉树大的会存在右边,小的会存放在左边。它是怎么实现的呢?就是通过实现comparator(comparable)接口,重写compare(compareTo方法)。。。。
  
而为什么Integer和String类型不用复写那些方法,存入Set里面遍历出来就是有序的呢?因为它们都已经实现了comparator和HashCode/equalse方法,而你若是存放自定义对象,就需要你自己去实现了,按照你自己想要的规则
作者: zhanganping    时间: 2016-2-16 21:13
二楼正解的




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