如何分析HashMap的學(xué)習(xí),針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、吉木乃網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為吉木乃等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
HashMap 根據(jù)鍵的 hashCode 值存儲數(shù)據(jù),大多數(shù)情況下可以直接定位到它的值,因而具有很快的訪問速度,但遍歷順序卻是不確定的。HashMap 最多只允許一條記錄的鍵為 null,允許多條記錄的值為 null。HashMap 非線程安全,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫 HashMap,可能會導(dǎo)致數(shù)據(jù)的不一致。如果需要滿足線程安全,可以用 Collections 的synchronizedMap 方法使 HashMap 具有線程安全的能力,或者使用 ConcurrentHashMap。
我一眼就能看出,他是在面試之前做了功課。并不是真正的懂 HashMap,一個(gè) put 方法就把他打回原形了!
學(xué)習(xí)好的人為什么學(xué)習(xí)好?因?yàn)閯e人善于總結(jié)!好了,廢話不多說,看我的圖!
簡單的來說,可以用下面幾句話總結(jié)!
①.判斷鍵值對數(shù)組 table[i] 是否為空或?yàn)?null,否則執(zhí)行 resize() 進(jìn)行擴(kuò)容;
②.根據(jù)鍵值 key 計(jì)算 hash 值得到插入的數(shù)組索引 i,如果 table[i]==null,直接新建節(jié)點(diǎn)添加,轉(zhuǎn)向⑥,如果 table[i] 不為空,轉(zhuǎn)向③;
③.判斷 table[i] 的首個(gè)元素是否和 key 一樣,如果相同直接覆蓋 value,否則轉(zhuǎn)向④,這里的相同指的是 hashCode 以及 equals;
④.判斷 table[i] 是否為 treeNode,即 table[i] 是否是紅黑樹,如果是紅黑樹,則直接在樹中插入鍵值對,否則轉(zhuǎn)向⑤;
⑤.遍歷 table[i],判斷鏈表長度是否大于8,大于8的話把鏈表轉(zhuǎn)換為紅黑樹,在紅黑樹中執(zhí)行插入操作,否則進(jìn)行鏈表的插入操作;遍歷過程中若發(fā)現(xiàn) key 已經(jīng)存在直接覆蓋 value 即可;
⑥.插入成功后,判斷實(shí)際存在的鍵值對數(shù)量size是否超多了最大容量 threshold,如果超過,進(jìn)行擴(kuò)容。
關(guān)于 如何分析HashMap的學(xué)習(xí)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。
當(dāng)前名稱:如何分析HashMap的學(xué)習(xí)
轉(zhuǎn)載注明:http://jinyejixie.com/article0/psiioo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站制作、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)