0
点赞
收藏
分享

微信扫一扫

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

独兜曲 2022-02-26 阅读 180

目录

        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 条评论