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方法默認比較的是兩個對象的內存地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM