HashMap是基于哈希表的數據結構,它的工作原理是通過鍵(key)的哈希值來快速定位存儲位置。
具體工作原理如下:
- 當向HashMap中插入鍵值對時,首先會根據鍵的哈希值計算出存儲位置,這個位置稱為“桶”(bucket)。
- 如果該桶為空,則直接將鍵值對插入其中。
- 如果該桶不為空,則可能存在兩種情況:
- 如果鍵已經存在,則更新對應的值。
- 如果鍵不存在,則將新的鍵值對插入到鏈表的末尾(Java 8之后,當鏈表長度達到一定閾值(默認為8)時,鏈表會轉換為紅黑樹,以提高查詢效率)。
- 當需要查找某個鍵對應的值時,HashMap會根據鍵的哈希值找到對應的桶,然后在鏈表(或紅黑樹)中依次比較鍵值對的鍵,直到找到對應的鍵值對,或者鏈表(或紅黑樹)遍歷完畢仍未找到。
需要注意的是,由于哈希函數并不是完美的,不同的鍵可能會映射到同一個桶中,這種情況稱為“哈希碰撞”。為了解決哈希碰撞,HashMap使用鏈表(或紅黑樹)來存儲具有相同哈希值的鍵值對,以避免數據丟失。