Java - HashMap源碼解析

來源:互聯網
上載者:User

標籤:載入   技術   重要   位置   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源碼解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.