1. 程式人生 > 其它 >HashMap中的put()和get()的實現原理

HashMap中的put()和get()的實現原理

1、map.put(k,v)實現原理
(1)、首先將k,v封裝到Node物件當中(節點)。
(2)、然後它的底層會呼叫K的hashCode()方法得出hash值。
(3)、通過雜湊表函式/雜湊演算法,將hash值轉換成陣列的下標,下標位置上如果沒有任何元素,就把Node新增到這個位置上。如果說下標對應的位置上有連結串列。此時,就會拿著k和連結串列上每個節點的k進行equal。如果所有的equals方法返回都是false,那麼這個新的節點將被新增到連結串列的末尾。如其中有一個equals返回了true,那麼這個節點的value將會被覆蓋。

2、map.get(k)實現原理
(1)、先呼叫k的hashCode()方法得出雜湊值,並通過雜湊演算法轉換成陣列的下標。
(2)、通過上一步雜湊演算法轉換成陣列的下標之後,在通過陣列下標快速定位到某個位置上。重點理解如果這個位置上什麼都沒有,則返回null。如果這個位置上有單向連結串列,那麼它就會拿著引數K和單向連結串列上的每一個節點的K進行equals,如果所有equals方法都返回false,則get方法返回null。如果其中一個節點的K和引數K進行equals返回true,那麼此時該節點的value就是我們要找的value了,get方法最終返回這個要找的value。

何隨機增刪、查詢效率都很高的原因是?
原因: 增刪是在連結串列上完成的,而查詢只需掃描部分,則效率高。

為什麼放在hashMap集合key部分的元素需要重寫equals方法?
因為equals方法預設比較的是兩個物件的記憶體地址

我是個雙魚座的小王子,沉浸在自己的程式碼世界裡,去探索這未知的世界,希望遇到更多的小夥伴一起前行!