在平時需要用到鍵值對儲存資料時,我們便會用到面試必備:hashmap原始碼解析(jdk8)hashmap
,這篇文章基於jdk1.8
,參考前輩的文章,對hashmap
進行一定的理解.
hashmap
之比於arraylist
和linkedlist
,感覺原始碼複雜得多,由於才學疏淺,本文很大部分參考上面鏈結文章,因為注釋寫得很詳細,有幾個函式是照搬的,這裡感謝原作者,以後功力足夠,一定會寫一篇自己的理解。
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 為空,則建立新節點...