目录
1. HashSet介绍
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。 HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 必须在多线程访问时显式同步对 HashSet 的并发访问。 HashSet 实现了 Set 接口。
HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。
HashSet 类位于 java.util 包,使用前需要导入。
import java.util.HashSet;
创建一个 HashSet 对象 set,用于保存字符串元素。
HashSet<String> set = new HashSet<>();
2. 使用方法
2.1 添加元素
实例:
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("张三");
set.add("李四");
set.add("张三");
System.out.println(set);// 输出结果:[李四, 张三]
// 张三被添加了两次,它在集合中也只会出现一次,因为集合中的每个元素都必须是唯一的。
2.2 判断元素是否存在
实例:
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("张三");
set.add("李四");
// 判断元素是否存在
System.out.println(set.contains("李四"));// 输出结果:true
System.out.println(set.contains("王二"));// 输出结果:false
2.3 删除元素
实例:
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("张三");
set.add("李四");
set.add("王二");
// 删除元素,删除成功返回true,否则返回false
System.out.println(set.remove("张三"));// 输出结果:true
System.out.println(set);// 输出结果:[李四, 王二]
2.4 计算集合元素个数
实例:
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("张三");
set.add("李四");
set.add("王二");
// 计算集合中元素个数
System.out.println(set.size());// 输出结果:3
2.5 迭代HashSet
实例:
HashSet<String> set = new HashSet<>();
// 添加元素
set.add("张三");
set.add("李四");
set.add("王二");
for (String s : set) {
System.out.println(s);
}// 输出结果:张三
李四
王二
3. 底层实现分析
HashSet 的实现是依赖于HashMap 的,HashSet 的值都是存储在HashMap中的。在HashSet 的构造法中会初始化一个HashMap对象,HashSet不允许值重复。因此,HashSet 的值是作为 HashMap的key存储在HashMap中的,当存储的值已经存在时返回 false 。