【Java】HashMap 介紹

在 Java 中,HashMap 是最常用的集合類之一,它提供了一個基於哈希表的實現,用於存儲鍵值對(Key-Value pairs)。HashMapMap 介面的實現之一,它允許我們使用一個鍵來唯一地標識一個值。

主要特性:

  1. 存儲結構
  • HashMap 使用哈希表(Hash Table)來存儲元素。
  • 鍵(Key)會通過一個哈希函數進行處理,以確保鍵值對能快速存取。
  1. 非同步(Non-synchronized)
  • HashMap 不是同步的,這意味著它不是線程安全的。如果需要多線程環境中使用,應該考慮使用 Collections.synchronizedMap()ConcurrentHashMap
  1. 允許 null 值
  • HashMap 可以存儲 null 鍵和 null 值。
  • 鍵只能有一個 null 值,因為鍵是唯一的,但可以有多個 null 值。
  1. 無序性
  • HashMap 不保證鍵值對的插入順序。當資料被插入後,並不會以插入順序來儲存。若需按插入順序存儲,可以使用 LinkedHashMap
  1. 性能
  • HashMap 的查找和插入操作的平均時間複雜度為 O(1),因為它是基於哈希表的。然而,當有哈希衝突時,可能會退化到 O(n)(n 是元素數量),具體取決於哈希函數的效率和碰撞數量。

基本操作方法:

創建 HashMap

import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { // 創建一個空的 HashMap HashMap<String, Integer> map = new HashMap<>(); // 添加鍵值對 map.put("Alice", 25); map.put("Bob", 30); map.put("Charlie", 35); // 顯示 HashMap 中的鍵值對 System.out.println("HashMap: " + map); // 根據鍵獲取值 System.out.println("Bob's age: " + map.get("Bob")); // 檢查是否存在某個鍵或值 System.out.println("Does the map contain Alice? " + map.containsKey("Alice")); System.out.println("Does the map contain age 30? " + map.containsValue(30)); // 移除某個鍵值對 map.remove("Charlie"); // 顯示刪除後的 HashMap System.out.println("HashMap after removal: " + map); } }

常用方法:

  1. put(K key, V value):將一個鍵值對放入 HashMap,如果鍵已經存在,則覆蓋其值。
  2. get(Object key):根據鍵來獲取對應的值。如果鍵不存在,則返回 null
  3. remove(Object key):根據鍵移除對應的鍵值對。
  4. containsKey(Object key):檢查 HashMap 是否包含指定的鍵。
  5. containsValue(Object value):檢查 HashMap 是否包含指定的值。
  6. size():返回 HashMap 中的鍵值對數量。
  7. isEmpty():檢查 HashMap 是否為空。
  8. keySet():返回 HashMap 中所有鍵的集合。
  9. values():返回 HashMap 中所有值的集合。

適用場景:

  • 當需要快速查找、插入、刪除元素且不關心元素順序時,HashMap 是一個理想的選擇。
  • HashMap 特別適合需要根據鍵快速查找對應值的應用場景,如緩存、配置參數存儲等。

HashMap 與其他 Map 實現的區別:

  1. HashMap vs TreeMap
  • HashMap 是無序的,而 TreeMap 是有序的,它按鍵的自然順序排序。
  1. HashMap vs LinkedHashMap
  • LinkedHashMap 保持插入順序或最近訪問順序,而 HashMap 不保證順序。

HashMap 是一個非常高效且靈活的資料結構,適合處理大多數需要快速鍵值對存取的應用。

本文由 ChatGPT 生成