HashMap 得get put 方法實現原理


HashMap在日常開發中常用,每次我都只是會使用,沒有騰出時間去研究其中得原理,閑暇時間去刨析一下,其get、put方法,做下筆記方便以后復習。

hashmap是怎么來的?首先要知道數組結構,與鏈表結構。

數組結構

     我們日常使用得數組結構特點,空間復雜度高,區間連續,時間復雜O(1)

     優點:查詢快,原因是因為他通過數組得下標去查詢,區間連續,隨機查詢效率高。

     缺點:存儲較慢,原因是 區間連續,我們存儲到某個下標位置得時候,其后邊所有得下標都需要后移,效率較低。

鏈表結構

     特點,空間復雜度低,區間離散,時間復雜度O(N)

     優點:存儲較快,沒有固定大小,內存利用率高。

     缺點:查詢較慢,原因是每次查詢都需要從最開始開始遍歷,不能隨機查找,效率低。

 

所以hashmap是集中了數組結構與鏈表結構得優點,實現查詢快,存儲快

put

     是我們插入是后調用得方法,當我們調用.put(k,v)得時候,首先會把k,v封裝到一個node節點中,然后調用k得hashCode方法得到hash值,通過hash函數,將hash值轉換為數組下標,如果此下標對應得位置上沒有元素,則將節點存到該位置,如果有鏈表,則會拿k去與鏈表上得每個節點得k去做比較,相同得話就覆蓋此鏈表上得節點,全部不同得話就會,在此鏈表尾部,新建一個新的節點(k,v得node節點)。這樣就完成了一次插入。

get

    我們查詢的時候調用得方法,首先會調用k得hashcode方法,得到hash值,然后通過hash函數將hash值轉換為數組下標,去該下標中看有沒有元素,沒有得話返回null,如果該下標對應得位置有單鏈表,則會去鏈表拿k去和單鏈表得每個節點得k做對比,如果有相同得則返回,該節點得值,如果全部比完后沒有相同得則返回null,此為一次查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM