一、核心特性(灵魂)
1.无序性:元素存储无固定顺序(TreeSet、LinkedHashSet 除外),不支持索引访问。
2.唯一性:底层通过「哈希表(HashSet)」或「红黑树(TreeSet)」去重,拒绝重复元素(equals() 和 hashCode() 配合判断)。
3.无索引:不能用 for 循环遍历,需用迭代器、增强 for 循环。
二、常用实现类(3大核心)
实现类 底层结构 核心特点 适用场景
HashSet 哈希表(数组+链表/红黑树) 无序、查询/增删效率高(O(1)) 无需有序、追求性能优先
TreeSet 红黑树 有序(自然排序/自定义排序)、去重 需要排序的场景(如成绩排序)
LinkedHashSet 哈希表+双向链表 有序(维持插入顺序)、高效 既需去重又要保留插入顺序
三、核心方法(通用+特有)
1. 通用方法(实现 Collection 接口)
(1).增:add(E e)(重复元素返回 false,不插入)、addAll(Collection c)
(2).删:remove(Object o)、clear()
(3).查:contains(Object o)(判断是否包含)、size()(元素个数)、isEmpty()
(4).遍历:iterator()(迭代器)、增强 for 循环(for (E e : set))
2. 特有方法(TreeSet 专属)
(1).排序相关:first()(首元素)、last()(尾元素)、ceiling(E e)(≥e 的最小元素)、floor(E e)(≤e 的最大元素)
(2).自定义排序:创建时传入 Comparator 接口实现类(如 TreeSet<>(Comparator.comparingInt(User::getAge)))
四、去重原理(关键)
1.HashSet:先通过 hashCode() 计算元素存储位置,若位置为空则插入;若不为空,用 equals() 比较元素,相同则拒绝,不同则链表/红黑树存储。
2.TreeSet:通过 Comparable(自然排序)或 Comparator(自定义排序)的compare 方法判断,返回 0 则视为重复元素。
五、注意事项
1. 存储自定义对象时,需重写 equals() 和 hashCode()(HashSet/LinkedHashSet),或实现 Comparable 接口(TreeSet),否则无法正确去重/排序。
2. HashSet 线程不安全,多线程场景需用 Collections.synchronizedSet(set) 或 CopyOnWriteArraySet。
3. TreeSet 不能存储 null 元素,HashSet/LinkedHashSet 可存 1 个 null。
992

被折叠的 条评论
为什么被折叠?



