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:創建一個空的HashSet,具有默認初始容量(16)和載入因子(0.75)
HashSet<String> set1 = new HashSet<>();

// 構造器 2:創建一個包含指定集合元素的HashSet
Collection<String> collection = Arrays.asList("Apple", "Banana", "Cherry");
HashSet<String> set2 = new HashSet<>(collection);

// 構造器 3:創建一個空的HashSet,具有指定的初始容量和默認載入因子(0.75)
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是非常好的選擇。這就像一袋 marbles,每個marble都是不同的顏色——你可以輕鬆檢查你是否有一個特定的顏色,但你無法控制它們在倒出袋子時的順序。

隨著你在Java學習之旅中的進步,你會發現在許多情況下HashSet非常有用。繼續練習,你很快就會成為HashSet專家!開心編程!

Credits: Image by storyset