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

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

什麼是雜湊表?核心概念

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

vocus|新世代的創作平台

由圖中可以看見過 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
軟體工程師職涯升級計畫啟動!本文深入探討陣列與串列這兩種基礎資料結構,比較其特性、優缺點與常見操作,並輔以JavaScript範例程式碼及時間複雜度分析,幫助讀者學習如何根據不同情境選擇合適的資料結構,寫出更高效的程式。
Thumbnail
軟體工程師職涯升級計畫啟動!本文深入探討陣列與串列這兩種基礎資料結構,比較其特性、優缺點與常見操作,並輔以JavaScript範例程式碼及時間複雜度分析,幫助讀者學習如何根據不同情境選擇合適的資料結構,寫出更高效的程式。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這篇文章深入淺出地介紹堆疊(Stack)這種資料結構,包含其定義、特性、操作流程、JavaScript實作範例、應用場景(例如:回溯、瀏覽器上一頁功能、深度優先搜尋等),以及LeetCode相關題目。文末提供延伸學習資源,並鼓勵讀者提出學習需求。
Thumbnail
這篇文章深入淺出地介紹堆疊(Stack)這種資料結構,包含其定義、特性、操作流程、JavaScript實作範例、應用場景(例如:回溯、瀏覽器上一頁功能、深度優先搜尋等),以及LeetCode相關題目。文末提供延伸學習資源,並鼓勵讀者提出學習需求。
Thumbnail
本文提供軟體工程師面試常考的樹狀結構(Tree)相關知識,包含樹的基本概念、常見術語、二元樹、二元搜尋樹、樹的遍歷(DFS 與 BFS)、以及經典題目 Validate Binary Search Tree 的 JavaScript 解法與核心思路。
Thumbnail
本文提供軟體工程師面試常考的樹狀結構(Tree)相關知識,包含樹的基本概念、常見術語、二元樹、二元搜尋樹、樹的遍歷(DFS 與 BFS)、以及經典題目 Validate Binary Search Tree 的 JavaScript 解法與核心思路。
Thumbnail
什麼是雜湊表?—— 鍵值對的抽象資料型態 想像一下,你有一本非常厚的通訊錄。如果這本通訊錄是按照每個人的姓名首字母排序的,當你想找「王小明」的電話時,你可以迅速翻到「W」的開頭,然後快速找到他。雜湊表就
Thumbnail
什麼是雜湊表?—— 鍵值對的抽象資料型態 想像一下,你有一本非常厚的通訊錄。如果這本通訊錄是按照每個人的姓名首字母排序的,當你想找「王小明」的電話時,你可以迅速翻到「W」的開頭,然後快速找到他。雜湊表就
Thumbnail
本篇文章深入探討 RESTful API 與 GraphQL 兩種主流 API 設計風格的優缺點、適用場景及實作方式,並提供選擇建議,協助開發者根據專案需求做出明智的選擇。文章也涵蓋了 API 快取機制、權限控制、以及常見挑戰等面向。
Thumbnail
本篇文章深入探討 RESTful API 與 GraphQL 兩種主流 API 設計風格的優缺點、適用場景及實作方式,並提供選擇建議,協助開發者根據專案需求做出明智的選擇。文章也涵蓋了 API 快取機制、權限控制、以及常見挑戰等面向。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
在與 Claude Pro 一次漫長的對話互動的過程中,最後我問了一個看似簡單的問題,打算作為結論:「資本平準金是不是可以用來補充資本利得?」這句話本身並不複雜,卻讓 Claude Pro 陷入了一場無限迴圈的推理迷宮,最終甚至觸發使用上限,要求我「 3 小時之後再來」。
Thumbnail
在與 Claude Pro 一次漫長的對話互動的過程中,最後我問了一個看似簡單的問題,打算作為結論:「資本平準金是不是可以用來補充資本利得?」這句話本身並不複雜,卻讓 Claude Pro 陷入了一場無限迴圈的推理迷宮,最終甚至觸發使用上限,要求我「 3 小時之後再來」。
Thumbnail
軟體工程師職涯諮詢、履歷健檢與模擬面試服務,助您加薪!文章深入淺出圖 (Graph) 資料結構,涵蓋有向圖、無向圖、鄰接矩陣、鄰接列表、LeetCode 實戰範例 (Number of Islands),助您提升演算法能力。
Thumbnail
軟體工程師職涯諮詢、履歷健檢與模擬面試服務,助您加薪!文章深入淺出圖 (Graph) 資料結構,涵蓋有向圖、無向圖、鄰接矩陣、鄰接列表、LeetCode 實戰範例 (Number of Islands),助您提升演算法能力。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
在資料結構中,除了後進先出的 Stack,另一個常見且實用的就是 Queue(佇列)。它是許多系統背後默默運作的重要機制,例如排程器、印表機佇列、網路封包、事件處理機制等。 這篇筆記將帶你從零理解 Que
Thumbnail
在資料結構中,除了後進先出的 Stack,另一個常見且實用的就是 Queue(佇列)。它是許多系統背後默默運作的重要機制,例如排程器、印表機佇列、網路封包、事件處理機制等。 這篇筆記將帶你從零理解 Que
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News