1. HashSet - 图2
hashSet是把key存在数组中,把value存在链表中;
HashSet的存储方式是把HashMap中的Key作为Set的对应存储项.
image.png
image.png

  1. 这个类实现了Set接口,由一个哈希表(实际上是一个HashMap实例)支持。它不保证集合的迭代顺序;尤其是不保证顺序会随着时间的推移保持不变。该类允许使用 "空 "元素。

一、HashSet概述

|

1. hashSet的结构
HashSet底层是用hashMap实现的。hashMap特点如下:

image.png

hashMap_hashTable.png



| | —- | |

2. hashMap原理

image.png | |

3. 红黑树

image.png
image.png
image.png

|

hashMap和hashSet在1.7和1.8中的差异:https://blog.csdn.net/c99463904/article/details/77619826?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6.pc_relevant_paycolumn_v3&utm_relevant_index=12
解决hash冲突的办法:https://blog.csdn.net/u013182960/article/details/80225454?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

二、LinkedHashSet—-hashSet的子类

1. 特征

API—— List接口的linked list实现。
实现了所有list接口的方法,并允许所有元素(包括空元素)类型。
除了实现List接口外,LinkedList类还提供了统一命名的方法来在list的开头或结尾来获取、移除和插入元素。这些方法允许链接列表被用作堆栈、队列或双端队列。

三、 SortedSet接口

API—-一个进一步提供其元素总排序的集合。元素使用它们的自然排序,或通过通常在排序集创建时提供的Comparator来排序。集合的迭代器将以升序元素的顺序遍历该集合。我们提供了一些额外的操作来利用排序的优势。(这个接口是通过SortedMap来实现)。

|

Set总结:

(1)Set实现的基础是Map(HashMap)(2)Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象 | | —- |