資料結構筆記:雜湊表(Hash Table)

更新 發佈閱讀 4 分鐘
一種資料結構, 可以用非常快的時間存取資料

什麼是雜湊表?核心概念

雜湊表是一種資料結構, 使用一個 key (鍵) 快速找到 Value (值), 速度通常可以達到 O(1), 比如 Python 的 dict, Java 的 HashMap, JavaScript 的 Object/ Map 均是屬於雜湊表, 用圖表可以這樣呈現

raw-image

由圖中可以看見過 key 是唯一數值, 對應一個 value。

核心原理 :雜湊函式

雜湊函式 (Hash Function) 會將任意大小的輸入, 透過函式轉換成一個固定大小數字, 最為索引並且寫入進入 Table 當中。

Hash Table 的重要特性

  1. 資料查找 (Search) : 透過查詢 key 鍵, 作為索引找到 value 數值。
  2. 資料新增 (Insert) : 透過函式的轉換計算雜湊值, 並且把數值插入這個索引位置。
  3. 資料刪除 (Delete) : 找到索引, 移除資料。

程式範例

import java.util.HashMap;

public class HashMapExample {
public static void main(String[] args) {

// 建立 HashMap (Key:String, Value:Integer)
HashMap<String, Integer> scores = new HashMap<>();

// 放入資料 (put)
scores.put("Alice", 90);
scores.put("Bob", 75);
scores.put("Charlie", 80);

// 根據 Key 取出資料
System.out.println("Alice 的分數 : " + scores.get("Alice"));

// 判斷 Key 是否存在
if (scores.containsKey("Bob")) {
System.out.println("Bob 的分數是 : " + scores.get("Bob"));
}

// 移除資料
scores.remove("Charlie");

// 遍歷所有的 key-value
for(String key : scores.keySet()) {
System.out.println(key + "=" + scores.get(key));
}
}
}

程式碼說明

  • HashMap : 用來創建物件 (Object)。
  • put : 插入資料。
  • remove : 移除資料。
  • 使用 for 迴圈去抓取所有資料。

雜湊衝突與解決方法

儘管雜湊表能夠達到高效率, 但在實際應用中卻可能會得到相同的雜湊值, 這就是所謂的雜湊衝突 (Hash Collision)

這時候可以使用以下幾中方法解決

  1. 鏈氏串接 (Chaining) : 在 Value 的地方不直接存數值, 而是改成鏈結串列 (Linked List) 或陣列, 發生衝突則直接加入到末端
  2. 開放定址法 (Open Addressing) : 發生衝突時, 雜湊表會在其他位置找可用的空間來儲存

總結 : 雜湊表資料結構的好幫手 !

雜湊表在任程式當中都非常常見, 就是因為有極好的時間複雜度, 故在資料庫或者快取系統當中都可以看見其影子, 本篇以 Java 來作為例子簡單實作一個類別, 使讀者更了解雜湊值。



留言
avatar-img
Krist
2會員
11內容數
您好, 目前是軟體工程師 Krist
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
vocus 最具指標性的創作者社群──「野格團」, 2026 年春季,這支充滿專業、熱情的團隊再次擴編,迎來了 8 位實力堅強的「個人主題專家」新成員 💫💫💫 從投資理財、自我成長、閱讀書評到電影戲劇,他們各自帶著獨特的「創作超能力」準備在格友大廳與大家見面。
Thumbnail
vocus 最具指標性的創作者社群──「野格團」, 2026 年春季,這支充滿專業、熱情的團隊再次擴編,迎來了 8 位實力堅強的「個人主題專家」新成員 💫💫💫 從投資理財、自我成長、閱讀書評到電影戲劇,他們各自帶著獨特的「創作超能力」準備在格友大廳與大家見面。
Thumbnail
軟體工程師職涯諮詢、履歷健檢與模擬面試服務,助您加薪!文章深入淺出圖 (Graph) 資料結構,涵蓋有向圖、無向圖、鄰接矩陣、鄰接列表、LeetCode 實戰範例 (Number of Islands),助您提升演算法能力。
Thumbnail
軟體工程師職涯諮詢、履歷健檢與模擬面試服務,助您加薪!文章深入淺出圖 (Graph) 資料結構,涵蓋有向圖、無向圖、鄰接矩陣、鄰接列表、LeetCode 實戰範例 (Number of Islands),助您提升演算法能力。
Thumbnail
本文提供軟體工程師面試常考的樹狀結構(Tree)相關知識,包含樹的基本概念、常見術語、二元樹、二元搜尋樹、樹的遍歷(DFS 與 BFS)、以及經典題目 Validate Binary Search Tree 的 JavaScript 解法與核心思路。
Thumbnail
本文提供軟體工程師面試常考的樹狀結構(Tree)相關知識,包含樹的基本概念、常見術語、二元樹、二元搜尋樹、樹的遍歷(DFS 與 BFS)、以及經典題目 Validate Binary Search Tree 的 JavaScript 解法與核心思路。
Thumbnail
在與 Claude Pro 一次漫長的對話互動的過程中,最後我問了一個看似簡單的問題,打算作為結論:「資本平準金是不是可以用來補充資本利得?」這句話本身並不複雜,卻讓 Claude Pro 陷入了一場無限迴圈的推理迷宮,最終甚至觸發使用上限,要求我「 3 小時之後再來」。
Thumbnail
在與 Claude Pro 一次漫長的對話互動的過程中,最後我問了一個看似簡單的問題,打算作為結論:「資本平準金是不是可以用來補充資本利得?」這句話本身並不複雜,卻讓 Claude Pro 陷入了一場無限迴圈的推理迷宮,最終甚至觸發使用上限,要求我「 3 小時之後再來」。
Thumbnail
什麼是雜湊表?—— 鍵值對的抽象資料型態 想像一下,你有一本非常厚的通訊錄。如果這本通訊錄是按照每個人的姓名首字母排序的,當你想找「王小明」的電話時,你可以迅速翻到「W」的開頭,然後快速找到他。雜湊表就
Thumbnail
什麼是雜湊表?—— 鍵值對的抽象資料型態 想像一下,你有一本非常厚的通訊錄。如果這本通訊錄是按照每個人的姓名首字母排序的,當你想找「王小明」的電話時,你可以迅速翻到「W」的開頭,然後快速找到他。雜湊表就
Thumbnail
在資料結構中,除了後進先出的 Stack,另一個常見且實用的就是 Queue(佇列)。它是許多系統背後默默運作的重要機制,例如排程器、印表機佇列、網路封包、事件處理機制等。 這篇筆記將帶你從零理解 Que
Thumbnail
在資料結構中,除了後進先出的 Stack,另一個常見且實用的就是 Queue(佇列)。它是許多系統背後默默運作的重要機制,例如排程器、印表機佇列、網路封包、事件處理機制等。 這篇筆記將帶你從零理解 Que
Thumbnail
這篇文章深入淺出地介紹堆疊(Stack)這種資料結構,包含其定義、特性、操作流程、JavaScript實作範例、應用場景(例如:回溯、瀏覽器上一頁功能、深度優先搜尋等),以及LeetCode相關題目。文末提供延伸學習資源,並鼓勵讀者提出學習需求。
Thumbnail
這篇文章深入淺出地介紹堆疊(Stack)這種資料結構,包含其定義、特性、操作流程、JavaScript實作範例、應用場景(例如:回溯、瀏覽器上一頁功能、深度優先搜尋等),以及LeetCode相關題目。文末提供延伸學習資源,並鼓勵讀者提出學習需求。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News