hashmap 首先根據key計算hash值,(hashcode右移16位與hashcode異或計算)用hash值不用hashcode值是因為hashcode 32位 太大不方便計算,並且得到答案的概率不均衡。
第二步 是根據hash值去計算陣列下標 ((n-1)&hash),用這個不用hash值取餘計算因為二進位制更快,符合計算機原理, 效果和hash值取餘是一樣的。
下面是具體操作
其中node 節點包含 hash值 ,key ,value 。還有next(鍊錶的屬性)
當計算出來的下標相同時,就是hash衝突。
第一種情況,hash值相同時並且key相同,其實就是覆蓋了
第二種情況,hash值相同,key不同,就在同乙個陣列下的next節點插入。
HashMap的原理解析
進行hashmap原理解析 手寫乙個簡單的hashmap hashmap的底層執行是陣列加鍊表 鍊錶就是為了解決雜湊碰撞的情況 public class hashmap 關羽的hash值是 679082 index is 2 孫權的hash值是 751370 index is 5 張飛的hash值是...
HashMap原理解析
日常工作中經常用到map,基本上是用map map new hashmap 來得到乙個hashmap物件,之前並未深入去研究hashmap的實現原理,只是去簡單的去建立然後使用它。這次想深入了解便,去研究了一下hashmap的原始碼。做點筆記,記錄一下自己的一些收穫,想到哪寫到哪吧。hashmap繼...
HashMap原理解析
hashmap在jdk1.8之前和jdk1.8之後內部實現有所不同 在jdk1.8之前,hashmap底層是陣列和鍊錶的結構,從jdk1.8開始內部實現使用了陣列和鍊錶以及紅黑樹一 jdk1.8之前的hashmap實現原理 以jdk1.7為例 先看構造方法 public hashmap public...