1. Set集合基础概念解析
Set是Java集合框架中最具特色的接口之一,它代表数学意义上的"集合"概念。与List不同,Set不允许包含重复元素,这个特性在实际开发中经常被用来做数据去重。我第一次在电商项目中用到HashSet去重用户提交的SKU列表时,才真正体会到这个特性的价值。
Set接口主要实现类包括:
- HashSet:基于哈希表实现,查询效率O(1)
- TreeSet:基于红黑树实现,元素自动排序
- LinkedHashSet:维护插入顺序的HashSet
注意:Set判断元素是否重复的标准是equals()方法返回true,同时hashCode()值相同。这是面试常考点,也是实际开发中最容易踩坑的地方。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. HashSet底层实现原理
2.1 哈希表工作机制
HashSet的底层实际上是HashMap,每个元素作为HashMap的key存储。当向HashSet添加元素时:
- 先计算元素的hashCode值
- 通过哈希函数确定存储位置
- 若该位置已有元素,则调用equals()比较
- equals()返回true则视为重复元素
java复制// 典型HashSet使用示例
Set<String> cities = new HashSet<>();
cities.add("北京"); // 哈希值计算:3117
cities.add("上海"); // 哈希值计算:2804
cities.add("北京"); // 不会重复添加
2.2 负载因子与扩容机制
HashSet有两个关键参数:
- 初始容量(默认16)
- 负载因子(默认0.75)
当元素数量达到容量*负载因子时触发扩容,每次扩容为原来2倍。我在处理10万级数据去重时,通过new HashSet(int initialCapacity)指定初始容量,避免了多次扩容带来的性能损耗。
3. TreeSet的排序特性
3.1 自然排序与定制排序
TreeSet通过两种方式实现排序:
- 自然排序:元素实现Comparable接口
- 定制排序:创建TreeSet时传入Comparator
java复制// 定制排序示例:按字符串长度排序
Set<String> wor
