今天面試到map的put方法,參考https://blog.csdn.net/weixin_38480293/article/details/79405352
HashMap
首先呢
它是一個集合類,非線程安全,key、value(鍵值)對存儲格式。常見的api有put,get,size,remove等方法
在此呢介紹一下jdk1.8中的hashmap.put方法,
我們在使用put方法的時候會傳進key和value參數
在我們將這兩個參數傳入后,
第一步,我們的put方法會去判斷這個hashmap是否為null 或者長度是否為0,
若為null或者長度為0 則新建一個(這也是平時在編程過程中需要經常注意的細節),
第二步,就用到了我們這個key值啦,put方法會根據這個key計算hash碼來得到數組的位置,
(這里需要解釋一下,我們的hashmap默認是由一個數組加鏈表組成的)
得到位置后當然是繼續判斷這個數組下標的值是否為null,
為null 自然是直接插入我們的value值,else
第三步,判斷key是否為null,當key!=null我們就可以覆蓋value值,else if
第四步,判斷數組后面跟着的這個鏈是否為樹(TreeNode),是樹呢,我們傳入的值就會按照key,value的格式存入了,else
第五步,不是樹就是鏈表,那么put方法就會遍歷這個鏈表,
第六步,在遍歷的時候呢我們會判斷這個鏈表的長度是否大於8,大於呢就會將這個鏈表轉換為樹,再按照key,value的格式存入
第七步,小於則會判斷鏈表中的key!=null,若kay!=null則覆蓋,key==null我們的value就會插入
最后一步為判斷擴容,當數組容量超過最大容量時就會擴容一倍(即二進制的進位)