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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 549208564 中级黑马   /  2016-1-25 23:21  /  998 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

继承set接口的集合都是元素不重覆的吗?那又是怎样保证元素的唯一性的呢?

希望大神能详细的说明一下,都忘的差不多了。。。

4 个回复

倒序浏览
set集合保证元素唯一性,你要看是什么元素,但是简单说,hashSet保证元素唯一性靠的就是底层的hash表和equlas方法,因为hashset底层是hash表结构,之前学过数据结构的人都知道的;而treeset就像上面所说底层是二叉树结构,二叉树大的会存在右边,小的会存放在左边。它是怎么实现的呢?就是通过实现comparator(comparable)接口,重写compare(compareTo方法)。。。。
  
而为什么Integer和String类型不用复写那些方法,存入Set里面遍历出来就是有序的呢?因为它们都已经实现了comparator和HashCode/equalse方法,而你若是存放自定义对象,就需要你自己去实现了,按照你自己想要的规则
回复 使用道具 举报
怎么没人说呢
回复 使用道具 举报
这涉及到set集合里的底层数据结构,像TreeSet是二叉树数据结构,HashSet是哈希表结构,哈希表底层依赖两个方法:hashCode()和equals(),首先比较哈希值是否相同,如果相同就执行equals()方法,判断是否是相同的元素,重复的元素就不会添加,而TreeSet是红黑树(是一个自平衡的二叉树),元素进入集合的时候,把第一个元素作为根节点,之后添加的元素,就跟根节点比较,大的就放在右边,小的就放在左边,相等的就不添加
回复 使用道具 举报
二楼正解的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马