Set专项集合总结


一、核心特性(灵魂)
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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值