HashMap的底層原理

2021-08-28 19:25:37 字數 846 閱讀 2624

簡單來說,hashmap的實現是"陣列+鍊錶",陣列是hashmap的主體,鍊錶則是主要為了解決雜湊衝突而設立的。

對於查詢來說,陣列更加的方便;對於刪除,修改,鍊錶更加的方便。

hash表的本質就是乙個陣列,陣列中的每乙個元素被稱為乙個箱子(bin),箱子中存放的是鍵值對。

儲存過程如下:

根據k值計算他的雜湊值h.

假設箱子的個數為n,那麼鍵值對就放在第(h%n)這個箱子中。

如果這個箱子中已經有鍵值對,就使用開放定址法或者拉鍊法(每個箱子其實是乙個鍊錶,屬於同乙個箱子的所有鍵值對都會排列在鍊錶中)解決衝突。

hash表進行增刪改操作時,效能十分之高,不考慮hash衝突的影響下,僅需一次定位即可,時間複雜度為o(1).

hashmap由entry陣列+鍊錶組成,如下圖所示:

從上圖我們可以發現hashmap是由entry陣列+鍊錶組成的,乙個長度為16的陣列中,每個元素儲存的是乙個鍊錶的頭結點。那麼這些元素是按照什麼樣的規則儲存到陣列中呢。一般情況是通過hash(key)%len獲得,也就是元素的key的雜湊值對陣列長度取模得到。比如上述雜湊表中,12%16=12,28%16=12,108%16=12,140%16=12。所以12、28、108以及140都儲存在陣列下標為12的位置。

負載因子,是用來衡量雜湊表的空/滿程度,負載因子=總鍵值對/箱子個數。負載因子越大,意味著雜湊表越滿,越容易導致衝突,效能也就越低。 

HashMap底層原理

1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...

HashMap底層原理

hashmap實現map介面,非執行緒安全的,區別於concurrenthashmap。允許使用null值和null鍵,不保證對映的順序.底層資料結構是乙個 陣列 鍊錶 紅黑樹 put 根據key計算得到key.hash h k.hashcode h 16 根據key.hash計算得到桶陣列的索引i...

HashMap底層原理

預設負載因子 static final float default load factor 0.75f 無參構造 public hashmap 有參構造 public hashmap int initialcapacity public hashmap int initialcapacity,flo...