Java HashMap原始碼分析

2021-09-11 14:31:59 字數 1334 閱讀 7405

在平時需要用到鍵值對儲存資料時,我們便會用到hashmap,這篇文章基於jdk1.8,參考前輩的文章,對hashmap進行一定的理解.

面試必備:hashmap原始碼解析(jdk8)

hashmap之比於arraylistlinkedlist,感覺原始碼複雜得多,由於才學疏淺,本文很大部分參考上面鏈結文章,因為注釋寫得很詳細,有幾個函式是照搬的,這裡感謝原作者,以後功力足夠,一定會寫一篇自己的理解。

static class nodeimplements map.entry

public final k getkey

()

public final v getvalue

()

public final string tostring

() //計算節點的hashcode 將key的hashcode值和value的hashcode值異或得到

public final int hashcode

() //設定新的值,並返回舊的值

public final v setvalue(v newvalue)

//equals方法,兩個節點的key和value都相同時返回true

public final boolean equals(object o)

return

false;}}

複製**

可以看到node中儲存了下乙個節點的引用,是乙個單鏈表結構.

public v remove(object key) 

final noderemovenode(int hash, object key, object value,

boolean matchvalue, boolean movable)

p = e;

} while ((e = e.next) != null);}}

//如果有待刪除節點node, 且 matchvalue為false,或者值也相等

if (node != null && (!matchvalue || (v = node.value) == value ||

(value != null && value.equals(v))))

}return null;

}複製**

Java HashMap原始碼分析

hashset和hashmap是相同的實現 主要分析hashmap hashmap實現了map介面,允許放入null元素,與hashtable的主要區別是沒有實現執行緒安全,與treemap的主要區別是不能保證元素的順序,因此,不同時間迭代會得到不同的位置,hashmap是用衝突鍊錶法解決衝突 根據...

Java HashMap原始碼小結

本文基於jdk1.8.hashmap即雜湊表,是一種能以常數平均時間完成插入,刪除和查詢操作的資料結構 雜湊表有兩種實現方式 開放位址方式和衝突鍊錶方式 開放位址方式不需要使用鍊錶,但是要頻繁的再雜湊操作,常用的再雜湊方法有線性探測法,平方探測法,雙雜湊法。衝突鍊錶方式將所有雜湊值相同的鍵用鍊錶串起...

java hashmap原始碼學習二 put get

hashmap裡面兩個最重要的方法就是get和put 一 put object key 方法的實現 public v put k key,v value putval 的基本思路 1.要是table為空,則建立新的table 2.要是table length 1 hash key 為空,則建立新節點...