Set的特点

无序,存取顺序不一致(存储顺序和添加顺序不一致)
不重复,可以去重复
无索引,没有带索引的方法,不能用普通的for循环遍历,也不能通过索引获取元素

Set集合的实现类特点

HashASet:无序、不重复、无索引
LinkedHashSet:有序,不重复,无索引(HashSet的子类)
TreeSet:排序、不重复、无索引

Set集合的功能基本上与Collection的API一致

HashSet的底层原理

image.png

HashSet实现原理

image.png
image.png
image.png

HashSet去重复原理解析

image.png
刚刚创建的对象a和对象b相同,但是此时a和b只是内容相同他们的哈希地址却不相同,因此想判定他们的哈希值相同要重写hashCode()方法

LinkedHashSet集合概述和实现原理

有序,不重复,无索引
这里的有序指的是保证存储和取出的元素顺序一致
原理:底层数据结构是依然哈希表,只是每个元素有额外的多了一个双链表的机制记录存储的顺序
image.png

TreeSet集合概述和特点

不重复,无序,有序
有序:按照元素的大小默认升序排序
TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好
TreeSet集合是一定要排序的,可以将元素按照指定的规则进行排序

TreeSet集合默认规则

image.png
image.png
image.png

哈希值

image.png