一、Set接口
Set接口基本介绍
- 无序(添加和取出的顺序不一致),没有索引
- 不允许重复元素,所以最多包含一个NULL
- JDK API中Set接口的实现类有
Set接口的常用方法
和List一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样
Set接口的遍历方法
同Collection的遍历方法一样
- 可以使用迭代器
- 增强for
- 不能使用索引的方式来获取
二、HashSet
HashSet的全面说明
- HashSet实现了Set接口
- HashSet实际上是HashMap,看源码
- 可以存放null值,但是只能有一个null
- HashSet不保证元素是有序的,取决于hash后,再确定索引的结果
- 不能有重复元素/对象。在前面Set接口使用已经讲过
- set中add方法其实是返回一个boolean值
HashSet的底层机制说明
HashSet的底层是HashMap,HashMap底层是(数组+链表+红黑树)
1.执行HashSet的构造器
2.执行add方法
3.执行put方法
PRESENT起到一个占位的作用
Hash方法
4.putVal方法
相当于数组扩容
分析HashSet的扩容和转成红黑树机制