一、hashmap的資料結構
hashmap的資料結構是鍊錶雜湊,即陣列和鍊錶的結合體。
陣列:儲存空間連續,空間複雜度高,便於查詢,不便於插入和刪除;
鍊錶:儲存空間離散,空間複雜度小,便於插入和刪除,反而定址困難不易查詢;
二、底層原始碼實現
// 儲存的原始碼public
v put(k key, v value)
}//如果i索引處的entry為null,表明此處還沒有entry。
modcount++;
//將key、value新增到i索引處。
addentry(hash, key, value, i);
return
null
;}
首先,根據key計算hash值,根據hash值得到這個元素在陣列中的索引;如果陣列中的這個位置上放了其他元素,那麼在這個位置上的元素們以鍊錶的方式存放。新加入的放入鏈頭,最先加入的放入鏈尾。如果陣列中的這個位置上沒有放元素,直接放入即可。
addentry(hash, key, value, i)方法根據計算出的hash值,將key-value對放在陣列table的i索引處。addentry 是 hashmap 提供的乙個包訪問許可權的方法。
void addentry(int hash, k key, v value, intbucketindex)
// 根據key獲取元素public
v get(object key)
return
null
;}
從hashmap中get元素時,首先計算key的hashcode,找到陣列中對應位置的某一元素,然後通過key的equals方法在對應位置的鍊錶中找到需要的元素。
HashMap深度解析
簡介 基於雜湊表的 map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。除了非同步和允許使用 null 之外,hashmap 類與 hashtable 大致相同。此類不保證對映的順序,特別是它不保證該順序恆久不變。此實現假定雜湊函式將元素適當地分布在各桶之間,...
HashMap初步解析
hashmap集合 1 hashmap集合底層是雜湊表 雜湊表的資料結構。2 雜湊表是乙個怎樣的資料結構呢?雜湊表是乙個陣列和單向鍊錶的結合體。陣列 在查詢方面效率很高,隨機增刪方面效率很低。單向鍊錶 在隨機增刪方面效率較高,在查詢方面效率很低。雜湊表將以上的兩種資料結構融合在一起,充分發揮它們各自...
HashMap以及跟HashMap相關的內容
hashmap相信大家都用過,是以這樣的格式儲存的。其實內部真正用於儲存的是entry的陣列table 桶 下面就是源 了已經標註出來了 emprty table是個空表,用於是初始化時使用的。default load factor是負載因子,default initial capacity是初始化...