Set
无序、不可重复
向Set中添加pojo数据,要保证对象唯一,必须重写equals和hashCode方法
HashSet
- Set实现类之一:HashSet
- 特点:Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。
- 储存方式:数组+链表结构
- 储存过程
- 调用元素的hashCode()方法,计算hash值
- 利用hash值根据算法计算出在数组中的位置,该位置如果没有数据,直接插入
- 有数据的话,比较hash值,hash值不一样的话,则说明值不同,链式添加(如图)
- hash值一样的话,调用equals方法,返回true,说明值一样,添加失败;返回false,说明值不一样,添加成功
底层是数组,初始容量为16,当如果使用率超过0.75,就会扩大容量为原来的2倍。(16扩容为32,依次为64,128…等)
LinkedHashSet
- LinkedHashSet 是 HashSet 的子类
- 给数据添加了类似双向链表的引用,使得在查询实根据引用链表有了顺序关系
- 查询快(频繁的遍历操作可以考虑用LinkedHashSet)
TreeSet
- TreeSet 是 SortedSet 接口的实现类
- 判断是否相同用的是compareTo()返回是否是0
- 添加要求是相同类型的对象
- 比较对象要实现或者添加比较器Comparator