- Set集合是Collection集合的子类
- Set集合有两个实现类 HashSet、TreeSet
- HashSet作为Set集合的主要实现类 HashSet拥有一个LinkedHashSet子类
- Set集合元素 无序、不可重复(HashSet)
- 无序性 底层存储元素时 并非按照数组索引的顺序添加 而是根据数据的哈希值决定数据位置
- 不可重复 添加元素时 调用元素的.equals方法 不能返回true (自定义类型元素需要重写equals和hashCode方法)
- HashSet添加元素过程
- 获取要添加元素的hashCode值 通过特定算法确定元素在底层数组中的位置
- 查看即将要插入的位置是否存在数据 存在则进行hashCode值比较
- hashCode值不同 则将新添加的元素放置旧元素的下方 (同一个位置存在多个元素 元素之间使用链表
- hashCode值相同 则调用要添加元素的equals方法对当前位置的元素进行比较
- 相同添加失败 不同则进行添加
- LinkedHashSet 添加元素的同时 每个元素都存在两个引用 记录改元素的上一个元素 下一个元素(链表)
- LinkedHashSet 对应需要频繁操作效率更好
- TreeSet 可以实现元素排序
- TreeSet 要求向集合添加元素时 必须是相同类对象 如第一个元素添加Integer 第二个元素添加String 则会报错
- TreeSet 向集合中添加自定义类元素时 需要类实现Comparable接口 重写排序方法