標籤:載入 技術 重要 位置 java 衡量 元素 factor blog
java提高篇(二三)-----HashMap
HashMap也是我們使用非常多的Collection,它是基於雜湊表的 Map 介面的實現,以key-value的形式存在。在HashMap中,key-value總是會當做一個整體來處理,系統會根據hash演算法來來計算key-value的儲存位置,我們總是可以通過key快速地存、取value。下面就來分析HashMap的存取。
一、定義
HashMap實現了Map介面,繼承AbstractMap。其中Map介面定義了鍵映射到值的規則,而AbstractMap類提供 Map 介面的骨幹實現,以最大限度地減少實現此介面所需的工作,其實AbstractMap類已經實現了Map,這裡標註Map LZ覺得應該是更加清晰吧!
二、建構函式
HashMap提供了三個建構函式:
HashMap():構造一個具有預設初始容量 (16) 和預設載入因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity):構造一個帶指定初始容量和預設載入因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity, float loadFactor):構造一個帶指定初始容量和載入因子的空 HashMap。
在這裡提到了兩個參數:初始容量,載入因子。這兩個參數是影響HashMap效能的重要參數,其中容量表示雜湊表中桶的數量,初始容量是建立雜湊表時的容量,載入因子是雜湊表在其容量自動增加之前可以達到多滿的一種尺度,它衡量的是一個散列表的空間的使用程度,負載因子越大表示散列表的裝填程度越高,反之愈小。對於使用鏈表法的散列表來說,尋找一個元素的平均時間是O(1+a),因此如果負載因子越大,對空間的利用更充分,然而後果是尋找效率的降低;如果負載因子太小,那麼散列表的資料將過於稀疏,對空間造成嚴重浪費。系統預設負載因子為0.75,一般情況下我們是無需修改的。
HashMap是一種支援快速存取的資料結構,要瞭解它的效能必須要瞭解它的資料結構。
三、資料結構
我們知道在Java中最常用的兩種結構是數組和類比指標(引用),幾乎所有的資料結構都可以利用這兩種來組合實現,HashMap也是如此。實際上HashMap是一個“鏈表散列”,如下是它資料結構:
從我們可以看出HashMap底層實現還是數組,只是數組的每一項都是一條鏈。其中參數initialCapacity就代表了該數組的長度。下面為HashMap建構函式的源碼:
Java - HashMap源碼解析