Set、TreeSet、HashSet区别

Set,TreeSet,HashSet,SortedSet,LinkedHashSet的区别
(1)Set接口
不允许出现重复的元素,每个元素添加入set时,set集合会使用equals方法,判断集合中是否有相同的元素,如果有,就返回false,如果没有,才进行操作。同时set的元素是无序的,就是说输出set集合中元素时,不是按照存入的顺序进行输出的
(2)HashSet
是Set接口的实现类,HashSet不能保证元素的排列顺序,顺序有可能会发生变化
同时,HashSet不是同步的,也就是说不是线程安全的,集合中可以有一个null。
HashSet的底层实现是HashMap,在HashSet中,元素都存在HashMap键值对的key上面,而value是由一个统一的值,private static final Object PRESENT = new Object();,(定义一个虚拟的Object对象作为HashMap的value,将此对象定义为static final。)
所以在hashSet插入元素的时候,底层的hashmap会判断key值是否存在,如果不存在,则插入
而hashmap判断key是否存在的方式是通过遍历hashmap中所有元素的hashcode是否和要插入元素的hashcode相同
(3)SortedSet
SortedSet中的元素无序不可重复,但是存进去的元素可以按照元素大小顺序自动排序
(4)TreeSet
是SortedSet接口的唯一实现类。TreeSet可以确保集合元素处于排序状态,支持两种排序:自然排序和定制排序,默认是自然排序。
TreeSet中元素也是不能重复的,判断两个对象不相等的方式是两个对象通过equals方法返回false或者通过CompareTo方法比较没有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。
Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口T’r的对象就可以比较大小。
obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。
如果我们将两个对象的equals方法总是返回true,则这两个对象的compareTo方法返回应该返回0
定制排序
自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(To1,To2)方法
(5)LinkedHashSet
LinkedHashSet维护着一个运行于所有条目的双向链表,在链表中定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
LinkedHashSet继承了HashSet,又基于LinkedHashMap的实现。底层使用LinkedHashMap来保存所有的元素,和hashset保存元素的方式类似,而操作方法上又与HashSet相同。

所以如果想要保存插入顺序或者访问顺序,就使用LinkedHashMap,如果要将插入元素按照我们想要的顺序存储,就使用TreeSet

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值