在 Java 中,Set 系列集合是一个非常重要的集合框架,它提供了多种实现,每个实现都具有独特的特性,适用于不同的场景。本文将详细介绍 Set 系列集合的相关知识,包括其通用特性、各种实现类及其底层原理。
一、Set 集合的通用特性
Set 集合具有以下几个显著的特点:
- 无序:这意味着元素的存储顺序和取出顺序可能不一致。当你将元素添加到 Set 集合中时,它们不会按照添加的顺序被存储,在取出时,其顺序也会有所不同。
- 不重复:Set 集合的一个重要特性是它能够自动去除重复元素。当你尝试添加一个已经存在于集合中的元素时,添加操作将不会成功。
- 无索引:Set 集合没有提供带索引的方法,因此你不能使用普通的 for 循环遍历,也不能通过索引来获取元素。
二、Set 集合的实现类
HashSet
- 特点:无序、不重复、无索引。
- 底层原理:
- HashSet 底层集合采用哈希表存储数据,哈希表对于增删改查数据性能都比较好。
- 具体实现步骤如下:
- 创建一个默认长度为 16,默认加载因子为 0.75 的数组,数组名
table
。 - 根据元素的哈希值跟数组长度计算出应存入的位置,公式为
int index = (数组长度 - 1) & 哈希值
。 - 判断当前位置是否为
null
,如果是null
直接存入。<
- 创建一个默认长度为 16,默认加载因子为 0.75 的数组,数组名