- 1.底层还是HashMap实现
- 2.没有索引,无序(添加和取出的顺序不一致),存储方式是根据hash值所在的下标存储的
- 3.不允许重复元素,所以最多包含一个null
- 4.遍历方法有增强for 和 迭代器
add(Object o)和addAll(Collection c)增加元素
contains(Object o)和containsAll(Collection c)判断元素是否存在
isEmpty()判断集合是否为空
remove(Object o)和removeAll(Collection c)删除元素
size()返回集合的大小
clear()清空集合
iterator()迭代器
toArray()将内容转到数组中
1.HashSet底层是HashMap
2.添加一个元素时,先得到hash值 ,转化成为索引值
3.找到存储数据表table,看到索引值位置是否已经存放的有元素
4.如果没有直接加入
5.如果有,调用equal比较,如果相同就放弃添加,如果不相同,则添加到当前索引链表的后面
6.如果一个索引下的链表长度大于8,就会进行树化(红黑树)
- 加入两个new dog(“阿圣”);结果是两个不同对阿圣对象
- 加入两个 new String(“阿圣”);结果是一个阿圣对象
- 原因是底层采用equal比较判断是否已经存在相同的元素(可以重载)



