Set,SortedSet,HashSet,LinkedHashSet,TreeSet的介绍

目录

        Set集合:

        SortedSet集合存储元素特点:

        HashSet集合的特点:

        LinkedHashSet集合的特点:

        TreeSet集合的特点:


Set集合:

  • 1、无序,不可重复,没有索引,取出的顺序和添加的顺序不一样,但是他是固定的。
  • 2、和List接口一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样。
  • 3、可以使用迭代器和增强for遍历,不能使用索引的方式。

SortedSet集合存储元素特点:

  • 首先是无序不可重复的,但是SortedSet集合中的元素是可排序的。
  • 无序:存进去的顺序和取出的顺序不一定相同。另外Set集合中元素没有下标。
  • 不可重复:存进去1,不能在存储1了。
  • 可排序:可以按照大小顺序排列。

HashSet集合的特点:

  • HashSet实际上是HashMap
  • HashSet底层是HashMap。HashMap底层是数组+单向链表+红黑树

  • 分析HashSet的添加元素底层是如何实现(hash() + equals() )
    • 1、先获取元素的哈希值(hash()方法),对哈希值进行运算,得到一个索引值,就是存在哈希表中的位置号
    • 2、找到存储数据表table,看这个索引位置是否已经存放元素
    • 3、如果没有,直接加入
    • 4、如果有,调用equals比较,如果相同就放弃添加,如果不相同,则添加到最后
    • 5、在jdk8中,如果一条链表的元素个数到达8个,table的大小到达64个,就会进行树化(红黑树)

  • 分析HashSet的扩容和转成红黑树机制
    • 1、HashSet底层是HashMap,第一次添加时,table数组扩容到16,临界值是 是 16 * 加载因子是0.75 = 12
    • 2、如果table数组使用到了临界值12,就会扩容到 16 << 1 = 32  ,新的临界值就是  32 * 0.75 = 24 以此类推
    • 3、表里面全部的数据到达了临界值就会扩容,而不是只看某一个链表
    • 4、在jdk8中,如果一条链表的元素个数到达 8 并且table的大小 >= 64 就会进行树化(红黑树) ,否则仍然采用数组扩容机制

LinkedHashSet集合的特点:

  • 1、LinkedHashSet是HashSet的子类
  • 2、LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表
  • 3、LInkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的
  • 4、LinkedHashSet不允许添加重复元素

TreeSet集合的特点:

  • 1、TreeSet集合底层实际上是一个TreeMap。
  • 2、TreeMap集合底层是一个二叉树。
  • 3、放到TreeSet集合中的元素,等同于放到TreeMap集合key部分了。
  • 4、TreeSet集合中的元素:无序不可重复,但是可以按照元素的大小顺序自动排序。称为:可排序集合。
  • 5、对于自定义的类型来说,TreeSet可以排序吗?
    • 不能,会出现异常。
    • 出现异常的原因是,这个类没有实现Comparable接口和重写compareTo方法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
sortSethashSettreeSet都是Java中的集合框架,用于存储一组元素。它们各自具有不同的特点和适用场景。 - HashSet:是基于哈希表实现的,可以快速查找元素。HashSet中的元素是无序的,不允许重复元素。因此,当需要快速查找元素且不关心元素顺序时,可以选择HashSet。 - TreeSet:是基于红黑树实现的,可以自动排序。TreeSet中的元素是有序的,不允许重复元素。因此,当需要自动排序且不允许重复元素时,可以选择TreeSet。 - SortedSet:是一个接口,继承自Set接口,它可以自动排序。SortedSet中的元素是有序的,不允许重复元素。SortedSet中有两个重要的实现类,分别是TreeSet和ConcurrentSkipListSet。当需要自动排序且不关心线程安全时,可以选择TreeSet;当需要自动排序且需要线程安全时,可以选择ConcurrentSkipListSet。 - LinkedHashSet:是基于哈希表和双向链表实现的,可以保持元素插入的顺序。LinkedHashSet中的元素是有序的,不允许重复元素。因此,当需要保持元素插入顺序且不允许重复元素时,可以选择LinkedHashSet。 总的来说,选择哪种集合框架,需要根据具体的需求来决定。如果需要快速查找元素且不关心元素顺序,可以选择HashSet;如果需要自动排序且不允许重复元素,可以选择TreeSet;如果需要保持元素插入顺序且不允许重复元素,可以选择LinkedHashSetSortedSet可以根据需要选择具体实现类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@小红花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值