Collection的三个Set集合

本文详细介绍了Java中Set接口的三种常见实现:TreeSet(排序且唯一),HashSet(无序且唯一)和LinkedHashSet(有序且唯一)。讨论了它们的底层数据结构、构造方法以及保证元素唯一性的机制。

java.util.Set

        特点

                元素唯一,list元素可重复

        常用实现类

                TreeSet

                        特点:排序,唯一.不允许添加null值

                HashSet

                        特点:无序,唯一,允许null值

                LinkedHashSet

                        特点:有序,唯一,允许null值

java.util.TreeSet            

        底层数据结构是红黑树

        构造方法

                public TreeSet()        空参构造方法 集合中的元素必须实现Comparable接口

                public TreeSet(Comparator c) 带参构造方法传入比较器对象 注意:如果传入了比较器,则不使用自然排序,而是使用比较器指定的规则来排序,此时,集合中的元素是否实现自然排序接口,无所谓了.

        TreeSet保证元素唯一的方式

                如果使用的是自然排序接口,就看 compareTo方法 返回的结果是不是0,如果是0,说明两个元素相同,不添加到集合.

                如果使用的是比较器 就看compare 返回的结果是不是0 如果是0 说明对象相同 不添加到集合.

java.util.HashSet   

       底层数据结构是JDK1.7哈希表

                                JDK1.8哈希表+红黑树

       TreeSet保证元素唯一的方式  

                先比较对象的hashCode

                        不同        说明元素不同,添加到集合

                        相同        不能说明这两个元素一定相同,需要继续比较equals

                                                                                                                相同        不添加

                                                                                                                不同        添加到集合      

java.util.LinkedHashSet

        链表+哈希表

        链表保证元素有序,哈希表保证元素唯一

                      hashCode和equal方法

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值