【Java】HashMap 介紹
在 Java 中,HashMap
是最常用的集合類之一,它提供了一個基於哈希表的實現,用於存儲鍵值對(Key-Value pairs)。HashMap
是 Map
介面的實現之一,它允許我們使用一個鍵來唯一地標識一個值。
主要特性:
- 存儲結構:
HashMap
使用哈希表(Hash Table)來存儲元素。- 鍵(Key)會通過一個哈希函數進行處理,以確保鍵值對能快速存取。
- 非同步(Non-synchronized):
HashMap
不是同步的,這意味著它不是線程安全的。如果需要多線程環境中使用,應該考慮使用Collections.synchronizedMap()
或ConcurrentHashMap
。
- 允許 null 值:
HashMap
可以存儲null
鍵和null
值。- 鍵只能有一個
null
值,因為鍵是唯一的,但可以有多個null
值。
- 無序性:
HashMap
不保證鍵值對的插入順序。當資料被插入後,並不會以插入順序來儲存。若需按插入順序存儲,可以使用LinkedHashMap
。
- 性能:
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); } }
常用方法:
put(K key, V value)
:將一個鍵值對放入HashMap
,如果鍵已經存在,則覆蓋其值。get(Object key)
:根據鍵來獲取對應的值。如果鍵不存在,則返回null
。remove(Object key)
:根據鍵移除對應的鍵值對。containsKey(Object key)
:檢查HashMap
是否包含指定的鍵。containsValue(Object value)
:檢查HashMap
是否包含指定的值。size()
:返回HashMap
中的鍵值對數量。isEmpty()
:檢查HashMap
是否為空。keySet()
:返回HashMap
中所有鍵的集合。values()
:返回HashMap
中所有值的集合。
適用場景:
- 當需要快速查找、插入、刪除元素且不關心元素順序時,
HashMap
是一個理想的選擇。 HashMap
特別適合需要根據鍵快速查找對應值的應用場景,如緩存、配置參數存儲等。
HashMap
與其他 Map 實現的區別:
HashMap
vsTreeMap
:
HashMap
是無序的,而TreeMap
是有序的,它按鍵的自然順序排序。
HashMap
vsLinkedHashMap
:
LinkedHashMap
保持插入順序或最近訪問順序,而HashMap
不保證順序。
HashMap
是一個非常高效且靈活的資料結構,適合處理大多數需要快速鍵值對存取的應用。
本文由 ChatGPT 生成