Java HashSet 类:初学者指南

引言

大家好,未来的 Java 开发者们!今天,我们将深入探讨 Java 中的 HashSet。如果你是编程新手,不用担心;我会一步一步引导你完成这个旅程,就像我多年来对无数学生的指导一样。你可以将 HashSet 视为一个神奇的盒子,它可以存储独特的项目——不允许有重复!就像你只能放一种类型的袜子的特殊抽屉。让我们开始吧!

Java - HashSet

类声明

在 Java 中,HashSet 是 Java 集合框架的一部分。要使用它,我们首先需要导入它:

import java.util.HashSet;

HashSet 的基本声明如下所示:

HashSet<E> hs = new HashSet<E>();

在这里,'E' 是你希望在 HashSet 中存储的元素类型的占位符。例如,如果你想要存储字符串:

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

参数

创建 HashSet 时,你可以指定两个可选参数:

  1. 初始容量:HashSet 用于存储元素的“桶”的数量。
  2. 装载因子:衡量 HashSet 在自动扩容前可以达到多满的一个指标。

现在不用太担心这些。把它们当作你神奇盒子的高级设置!

类构造函数

HashSet 提供了四个构造函数。让我们看看每一个:

// 构造函数 1:创建一个默认初始容量(16)和装载因子(0.75)的空 HashSet
HashSet<String> set1 = new HashSet<>();

// 构造函数 2:创建一个包含指定集合元素的 HashSet
Collection<String> collection = Arrays.asList("Apple", "Banana", "Cherry");
HashSet<String> set2 = new HashSet<>(collection);

// 构造函数 3:创建一个具有指定初始容量和默认装载因子(0.75)的空 HashSet
HashSet<String> set3 = new HashSet<>(20);

// 构造函数 4:创建一个具有指定初始容量和装载因子的空 HashSet
HashSet<String> set4 = new HashSet<>(20, 0.8f);

类方法

以下是最常用的 HashSet 方法的表格:

方法 描述
add(E e) 如果此集合中不存在指定元素,则添加指定元素
clear() 从此集合中移除所有元素
contains(Object o) 如果此集合包含指定元素,则返回 true
isEmpty() 如果此集合不包含元素,则返回 true
remove(Object o) 如果存在,则从此集合中移除指定元素
size() 返回此集合中的元素数量

继承的方法

HashSet 从其父类继承了方法。一些值得注意的包括:

  • 来自 Set:addAll(), containsAll(), equals(), hashCode(), removeAll(), retainAll()
  • 来自 Collection:iterator(), toArray()
  • 来自 Object:clone(), finalize(), getClass(), notify(), notifyAll(), wait()

向 HashSet 添加元素示例

让我们用一个有趣的例子来实践我们的知识。想象我们正在创建一个程序来跟踪我们店铺的独特冰淇淋口味:

import java.util.HashSet;

public class IceCreamShop {
public static void main(String[] args) {
// 创建一个新的 HashSet 来存储冰淇淋口味
HashSet<String> flavors = new HashSet<>();

// 添加一些口味
flavors.add("香草");
flavors.add("巧克力");
flavors.add("草莓");
flavors.add("薄荷碎片");

// 尝试添加重复项
boolean added = flavors.add("香草");

System.out.println("再次添加香草? " + added);
System.out.println("我们的冰淇淋口味: " + flavors);
System.out.println("我们有 " + flavors.size() + " 种独特口味!");

// 检查我们是否有特定的口味
String searchFlavor = "摇滚路";
if (flavors.contains(searchFlavor)) {
System.out.println("是的,我们有 " + searchFlavor + "!");
} else {
System.out.println("抱歉,我们没有 " + searchFlavor + "。");
}

// 移除一个口味
flavors.remove("草莓");
System.out.println("移除草莓后的更新口味: " + flavors);
}
}

输出

运行此程序时,你会看到类似以下内容:

再次添加香草? false
我们的冰淇淋口味: [香草, 薄荷碎片, 巧克力, 草莓]
我们有 4 种独特口味!
抱歉,我们没有 摇滚路。
移除草莓后的更新口味: [香草, 薄荷碎片, 巧克力]

让我们分解一下发生了什么:

  1. 我们创建了一个名为 flavors 的 HashSet 来存储我们的冰淇淋口味。
  2. 我们添加了四种口味:香草、巧克力、草莓和薄荷碎片。
  3. 我们尝试再次添加香草,但 add() 返回 false 因为 HashSet 不允许重复。
  4. 我们打印出所有的口味。请注意,顺序可能与我们添加的顺序不同 - HashSet 不保持插入顺序。
  5. 我们使用 contains() 检查是否有摇滚路口味。我们没有,所以它打印了一个“抱歉”消息。
  6. 最后,我们移除了草莓并打印了更新后的口味集合。

就这样!你已经创建了你的第一个 HashSet 并使用了它的一些最重要的方法。请记住,当需要存储唯一元素且不关心顺序时,HashSet 非常有用。它就像一个装有不同颜色弹珠的袋子 - 你可以轻松检查是否有特定的颜色,但你无法控制它们在你倒空袋子时的顺序。

在你继续 Java 之旅时,你会发现 HashSet 在许多情况下都非常有用。继续练习,你很快就会成为 HashSet 高手!编程快乐!

Credits: Image by storyset