Java HashSet 类:初学者指南
引言
大家好,未来的 Java 开发者们!今天,我们将深入探讨 Java 中的 HashSet。如果你是编程新手,不用担心;我会一步一步引导你完成这个旅程,就像我多年来对无数学生的指导一样。你可以将 HashSet 视为一个神奇的盒子,它可以存储独特的项目——不允许有重复!就像你只能放一种类型的袜子的特殊抽屉。让我们开始吧!
类声明
在 Java 中,HashSet 是 Java 集合框架的一部分。要使用它,我们首先需要导入它:
import java.util.HashSet;
HashSet 的基本声明如下所示:
HashSet<E> hs = new HashSet<E>();
在这里,'E' 是你希望在 HashSet 中存储的元素类型的占位符。例如,如果你想要存储字符串:
HashSet<String> fruitBasket = new HashSet<String>();
参数
创建 HashSet 时,你可以指定两个可选参数:
- 初始容量:HashSet 用于存储元素的“桶”的数量。
- 装载因子:衡量 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 种独特口味!
抱歉,我们没有 摇滚路。
移除草莓后的更新口味: [香草, 薄荷碎片, 巧克力]
让我们分解一下发生了什么:
- 我们创建了一个名为
flavors
的 HashSet 来存储我们的冰淇淋口味。 - 我们添加了四种口味:香草、巧克力、草莓和薄荷碎片。
- 我们尝试再次添加香草,但
add()
返回false
因为 HashSet 不允许重复。 - 我们打印出所有的口味。请注意,顺序可能与我们添加的顺序不同 - HashSet 不保持插入顺序。
- 我们使用
contains()
检查是否有摇滚路口味。我们没有,所以它打印了一个“抱歉”消息。 - 最后,我们移除了草莓并打印了更新后的口味集合。
就这样!你已经创建了你的第一个 HashSet 并使用了它的一些最重要的方法。请记住,当需要存储唯一元素且不关心顺序时,HashSet 非常有用。它就像一个装有不同颜色弹珠的袋子 - 你可以轻松检查是否有特定的颜色,但你无法控制它们在你倒空袋子时的顺序。
在你继续 Java 之旅时,你会发现 HashSet 在许多情况下都非常有用。继续练习,你很快就会成为 HashSet 高手!编程快乐!
Credits: Image by storyset