Java HashSet - JAVA教程

Java HashSet

Java 集合框架 Java 集合框架

HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。

HashSet 允许有 null 值。

HashSet 是无序的,即不会记录插入的顺序。

HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。

HashSet 实现了 Set 接口。

HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

基本类型对应的包装类表如下:

基本类型 引用类型
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

HashSet 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.HashSet; // 引入 HashSet 类

以下实例我们创建一个 HashSet 对象 sites,用于保存字符串元素:

HashSet<String> sites = new HashSet<String>();

添加元素

HashSet 类提供了很多有用的方法,添加元素可以使用 add() 方法:

示例代码
// 引入 HashSet 类importjava.util.HashSet;publicclassez4codeTest{publicstaticvoidmain(String[]args){HashSet<String>sites=newHashSet<String>();sites.add("Google");sites.add("ez4code");sites.add("Taobao");sites.add("Zhihu");sites.add("ez4code");// 重复的元素不会被添加System.out.println(sites);}}

执行以上代码,输出结果如下:

[Google, ez4code, Zhihu, Taobao]

在上面的实例中,ez4code 被添加了两次,它在集合中也只会出现一次,因为集合中的每个元素都必须是唯一的。

判断元素是否存在

我们可以使用 contains() 方法来判断元素是否存在于集合当中:

示例代码
// 引入 HashSet 类importjava.util.HashSet;publicclassez4codeTest{publicstaticvoidmain(String[]args){HashSet<String>sites=newHashSet<String>();sites.add("Google");sites.add("ez4code");sites.add("Taobao");sites.add("Zhihu");sites.add("ez4code");// 重复的元素不会被添加System.out.println(sites.contains("Taobao"));}}

执行以上代码,输出结果如下:

true

删除元素

我们可以使用 remove() 方法来删除集合中的元素:

示例代码
// 引入 HashSet 类importjava.util.HashSet;publicclassez4codeTest{publicstaticvoidmain(String[]args){HashSet<String>sites=newHashSet<String>();sites.add("Google");sites.add("ez4code");sites.add("Taobao");sites.add("Zhihu");sites.add("ez4code");// 重复的元素不会被添加sites.remove("Taobao");// 删除元素,删除成功返回 true,否则为 falseSystem.out.println(sites);}}

执行以上代码,输出结果如下:

[Google, ez4code, Zhihu]

删除集合中所有元素可以使用 clear 方法:

示例代码
// 引入 HashSet 类importjava.util.HashSet;publicclassez4codeTest{publicstaticvoidmain(String[]args){HashSet<String>sites=newHashSet<String>();sites.add("Google");sites.add("ez4code");sites.add("Taobao");sites.add("Zhihu");sites.add("ez4code");// 重复的元素不会被添加sites.clear();System.out.println(sites);}}

执行以上代码,输出结果如下:

[]

计算大小

如果要计算 HashSet 中的元素数量可以使用 size() 方法:

示例代码
// 引入 HashSet 类importjava.util.HashSet;publicclassez4codeTest{publicstaticvoidmain(String[]args){HashSet<String>sites=newHashSet<String>();sites.add("Google");sites.add("ez4code");sites.add("Taobao");sites.add("Zhihu");sites.add("ez4code");// 重复的元素不会被添加System.out.println(sites.size());}}

执行以上代码,输出结果如下:

4

迭代 HashSet

可以使用 for-each 来迭代 HashSet 中的元素。

示例代码
// 引入 HashSet 类importjava.util.HashSet;publicclassez4codeTest{publicstaticvoidmain(String[]args){HashSet<String>sites=newHashSet<String>();sites.add("Google");sites.add("ez4code");sites.add("Taobao");sites.add("Zhihu");sites.add("ez4code");// 重复的元素不会被添加for(Stringi:sites){System.out.println(i);}}}

执行以上代码,输出结果如下:


Google

ez4code

Zhihu

Taobao


HashSet 常用方法

方法 返回值 说明 示例
add(E e) boolean 添加元素到集合,成功返回 true ,重复元素返回 false set.add("Java");
remove(Object o) boolean 删除指定元素,成功返回 true ,元素不存在返回 false set.remove("Python");
contains(Object o) boolean 检查集合是否包含指定元素。 if (set.contains("Java")) { ... }
size() int 返回集合中的元素数量。 int count = set.size();
isEmpty() boolean 判断集合是否为空。 if (set.isEmpty()) { ... }
clear() void 清空集合中的所有元素。 set.clear();
iterator() Iterator<E> 返回集合的迭代器,用于遍历元素。 for (String s : set) { ... }
toArray() Object[] 将集合转换为数组。 Object[] arr = set.toArray();
toArray(T[] a) T[] 将集合转换为指定类型的数组。 String[] arr = set.toArray(new String[0]);
addAll(Collection<? extends E> c) boolean 添加另一个集合的所有元素(并集操作)。 set.addAll(Arrays.asList("A", "B"));
retainAll(Collection<?> c) boolean 仅保留与指定集合共有的元素(交集操作)。 set.retainAll(otherSet);
removeAll(Collection<?> c) boolean 删除与指定集合共有的元素(差集操作)。 set.removeAll(otherSet);

更多 API 方法可以查看: https://www.ez4code.com/manual/jdk11api/java.base/java/util/HashSet.html

Java 集合框架 Java 集合框架