精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試突擊:HashMap除了死循環還有什么問題?

開發 前端
本篇的這個問題是一個開放性問題,HashMap 除了死循環之外,還有其他什么問題?

本篇的這個問題是一個開放性問題,HashMap 除了死循環之外,還有其他什么問題?總體來說 HashMap 的所有“問題”,都是因為使用(HashMap)不當才導致的,這些問題大致可以分為兩類:

程序問題:比如 HashMap 在 JDK 1.7 中,并發插入時可能會發生死循環或數據覆蓋的問題。

業務問題:比如 HashMap 無序性造成查詢結果和預期結果不相符的問題。

接下來我們一個一個來看。

1.死循環問題

死循環問題發生在 JDK 1.7 版本中,形成的原因是 JDK 1.7 HashMap 使用的是頭插法,那么在并發擴容時可能就會導致死循環的問題,具體產生的過程如下流程所示。

HashMap 正常情況下的擴容實現如下圖所示:

舊 HashMap 的節點會依次轉移到新 HashMap 中,舊 HashMap 轉移的順序是 A、B、C,而新 HashMap 使用的是頭插法,所以最終在新 HashMap 中的順序是 C、B、A,也就是上圖展示的那樣。有了這些前置知識之后,咱們來看死循環是如何誕生的?

1.1 死循環執行流程一

死循環是因為并發 HashMap 擴容導致的,并發擴容的第一步,線程 T1 和線程 T2 要對 HashMap 進行擴容操作,此時 T1 和 T2 指向的是鏈表的頭結點元素 A,而 T1 和 T2 的下一個節點,也就是 T1.next 和 T2.next 指向的是 B 節點,如下圖所示:

1.2 死循環執行流程二

死循環的第二步操作是,線程 T2 時間片用完進入休眠狀態,而線程 T1 開始執行擴容操作,一直到線程 T1 擴容完成后,線程 T2 才被喚醒,擴容之后的場景如下圖所示:

從上圖可知線程 T1 執行之后,因為是頭插法,所以 HashMap 的順序已經發生了改變,但線程 T2 對于發生的一切是不可知的,所以它的指向元素依然沒變,如上圖展示的那樣,T2 指向的是 A 元素,T2.next 指向的節點是 B 元素。

1.3 死循環執行流程三

當線程 T1 執行完,而線程 T2 恢復執行時,死循環就建立了,如下圖所示:

因為 T1 執行完擴容之后 B 節點的下一個節點是 A,而 T2 線程指向的首節點是 A,第二個節點是 B,這個順序剛好和 T1 擴完容完之后的節點順序是相反的。T1 執行完之后的順序是 B 到 A,而 T2 的順序是 A 到 B,這樣 A 節點和 B 節點就形成死循環了,這就是 HashMap 死循環導致的原因。

1.4 解決方案

使用線程安全的容器來替代 HashMap,比如 ConcurrentHashMap 或 Hashtable,因為 ConcurrentHashMap 的性能遠高于 Hashtable,因此推薦使用 ConcurrentHashMap 來替代 HashMap。

2.數據覆蓋問題

數據覆蓋問題發生在并發添加元素的場景下,它不止出現在 JDK 1.7 版本中,其他版本中也存在此問題,數據覆蓋產生的流程如下:

線程 T1 進行添加時,判斷某個位置可以插入元素,但還沒有真正的進行插入操作,自己時間片就用完了。

線程 T2 也執行添加操作,并且 T2 產生的哈希值和 T1 相同,也就是 T2 即將要存儲的位置和 T1 相同,因為此位置尚未插入值(T1 線程執行了一半),于是 T2 就把自己的值存入到當前位置了。

T1 恢復執行之后,因為非空判斷已經執行完了,它感知不到此位置已經有值了,于是就把自己的值也插入到了此位置,那么 T2 的值就被覆蓋了。

具體執行流程如下圖所示。

2.1 數據覆蓋執行流程一

線程 T1 準備將數據 k1:v1 插入到 Null 處,但還沒有真正的執行,自己的時間片就用完了,進入休眠狀態了,如下圖所示:

2.2 數據覆蓋執行流程二

線程 T2 準備將數據 k2:v2 插入到 Null 處,因為此處現在并未有值,如果此處有值的話,它會使用鏈式法將數據插入到下一個沒值的位置上,但判斷之后發現此處并未有值,那么就直接進行數據插入了,如下圖所示:

2.3 數據覆蓋執行流程三

線程 T2 執行完成之后,線程 T1 恢復執行,因為線程 T1 之前已經判斷過此位置沒值了,所以會直接插入,此時線程 T2 插入的值就被覆蓋了,如下圖所示:

2.4 解決方案

解決方案和第一個解決方案相同,使用 ConcurrentHashMap 來替代 HashMap 就可以解決此問題了。

3.無序性問題

這里的無序性問題指的是 HashMap 添加和查詢的順序不一致,導致程序執行的結果和程序員預期的結果不相符,如以下代碼所示:

HashMap<String, String> map = new HashMap<>();
// 添加元素
for (int i = 1; i <= 5; i++) {
map.put("2022-10-" + i, "Hello,Java:" + i);
}
// 查詢元素
map.forEach((k, v) -> {
System.out.println(k + ":" + v);
});



我們添加的順序:

我們期望查詢的順序和添加的順序是一致的,然而以上代碼輸出的結果卻是:

執行結果和我們預期結果不相符,這就是 HashMap 的無序性問題。我們期望輸出的結果是 Hello,Java 1、2、3、4、5,而得到的順序卻是 2、1、4、3、5。

解決方案

想要解決 HashMap 無序問題,我們只需要將 HashMap 替換成 LinkedHashMap 就可以了,如下代碼所示:

LinkedHashMap<String, String> map = new LinkedHashMap<>();
// 添加元素
for (int i = 1; i <= 5; i++) {
map.put("2022-10-" + i, "Hello,Java:" + i);
}
// 查詢元素
map.forEach((k, v) -> {
System.out.println(k + ":" + v);
});

以上程序的執行結果如下圖所示:

總結

本文演示了 3 個 HashMap 的經典問題,其中死循環和數據覆蓋是發生在并發添加元素時,而無序問題是添加元素的順序和查詢的順序不一致的問題,這些問題本質來說都是對 HashMap 使用不當才會造成的問題,比如在多線程情況下就應該使用 ConcurrentHashMap,想要保證插入順序和查詢順序一致就應該使用 LinkedHashMap,但剛開始時我們對 HashMap 不熟悉,所以才會造成這些問題,不過了解了它們之后,就能更好的使用它和更好的應對面試了。


責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-01-18 06:59:50

HashMap循環底層

2020-09-29 15:24:07

面試數據結構Hashmap

2020-12-17 07:39:30

HashMap死循環數據

2013-06-06 13:34:56

HashMap線程不安全

2023-01-31 08:24:55

HashMap死循環

2025-01-21 00:00:00

HashMap死循環數據損壞

2022-09-07 07:05:25

跨域問題安全架構

2020-06-15 08:06:25

ES數據

2020-05-27 12:45:52

HashMapJava加載因子

2022-05-05 07:38:32

volatilJava并發

2022-07-27 07:36:01

TCP可靠性

2025-04-14 10:35:00

for 循環

2018-01-24 05:08:24

2018-10-09 13:23:22

2012-06-19 09:21:17

BYOD

2022-08-22 07:06:32

MyBatisSQL占位符

2019-04-26 13:01:16

ServiceMesh微服務架構

2022-12-02 08:48:16

CSS置灰網站

2020-04-17 11:45:30

程序員技術創業

2022-05-30 07:34:33

三范式Java
點贊
收藏

51CTO技術棧公眾號

男女激烈动态图| 91免费人成网站在线观看18| 国产真实乱人偷精品| 两个人看的在线视频www| av在线综合网| 国产精品久久久久久一区二区 | 玩弄japan白嫩少妇hd| 91九色在线porn| 国产成人a级片| 国产精品aaa| 久久久夜色精品| 久久99国产精品视频| 精品视频一区三区九区| www污在线观看| 中文字幕在线视频区| 成人h精品动漫一区二区三区| 国产精品69久久| 国产极品国产极品| 精品国产一区探花在线观看| 精品日韩成人av| 制服丝袜综合网| 免费成人在线电影| 亚洲老妇xxxxxx| 色综合666| 午夜福利视频一区二区| 美女高潮久久久| 91chinesevideo永久地址| 亚洲最大的黄色网址| 国产精品一在线观看| 欧美变态tickling挠脚心| 爱情岛论坛亚洲首页入口章节| av中文字幕在线看| 亚洲精品成人天堂一二三| 日韩av高清在线播放| 丰满肉嫩西川结衣av| 精品亚洲欧美一区| 国产精品美女网站| 黄色在线视频网址| 精品99视频| 九九精品视频在线| 欧美色图亚洲天堂| 亚洲精品一区二区妖精| 中文字幕精品—区二区| 免费观看av网站| 欧美亚洲色图校园春色| 亚洲成人激情视频| 第一页在线视频| 麻豆视频久久| 日韩三级中文字幕| 小早川怜子一区二区三区| 99九九久久| 欧美日韩在线亚洲一区蜜芽| 日韩av片网站| 欧美日韩视频免费看| 欧美一a一片一级一片| 亚洲人成无码www久久久| 麻豆免费版在线观看| 亚洲va国产va欧美va观看| 国产免费一区二区视频| 激情网站在线| 婷婷中文字幕一区三区| 国产妇女馒头高清泬20p多| 华人av在线| 精品久久中文字幕| 国产又黄又猛视频| 国产精品久久亚洲不卡| 欧美乱熟臀69xxxxxx| 久久精品国产露脸对白| 日韩中文字幕视频网| 亚洲成人黄色在线| 久久精品一区二区免费播放| 精品视频网站| xxxxx91麻豆| 久久久久久久久久一区二区三区| 伊人精品视频| 国产精品99一区| 91精品国产综合久| 国产精品影视在线| 狠狠色综合色区| 亚洲 欧美 自拍偷拍| 国产欧美一区二区精品性色超碰| 一区二区视频在线播放| 最新国产露脸在线观看| 亚洲777理论| 久久精品香蕉视频| 国产精品成人3p一区二区三区| 欧美videossexotv100| 人妻丰满熟妇av无码久久洗澡 | 亚洲GV成人无码久久精品| 秋霞成人午夜伦在线观看| 91中文在线观看| 五月天丁香视频| 欧美经典一区二区三区| 青青草免费在线视频观看| 美女搞黄视频在线观看| 欧美日韩三级一区| 一级黄色免费视频| 欧美日韩中文字幕一区二区三区| 久久久国产精品免费| 自拍偷拍欧美亚洲| 精品一区二区三区视频| 好吊妞www.84com只有这里才有精品 | 久久免费电影| 欧美自拍丝袜亚洲| 91超薄肉色丝袜交足高跟凉鞋| 亚洲精品国产动漫| 久久中文字幕在线视频| 日韩综合在线观看| 成人性视频免费网站| 亚洲国产精品视频一区| 91黄页在线观看| 在线不卡a资源高清| 99久久人妻精品免费二区| 天天射综合网视频| 欧美孕妇性xx| 免费看黄色一级视频| 中文字幕不卡三区| 亚洲中文字幕无码专区| 欧美日韩中出| 国产亚洲人成网站在线观看| 久久中文字幕无码| 国内不卡的二区三区中文字幕| 欧美重口乱码一区二区| 国产一二三在线| 日韩免费观看高清完整版| 可以免费看av的网址| 久久久精品五月天| 精品午夜一区二区三区| 日本伦理一区二区| 欧美久久久久中文字幕| 精品人妻无码一区二区三区换脸| 99精品热视频只有精品10| 5g国产欧美日韩视频| 免费的黄网站在线观看| 欧美午夜在线观看| 国产av自拍一区| 麻豆亚洲精品| 欧美日韩国产综合视频在线| 日本在线影院| 日韩经典第一页| 自拍偷拍欧美亚洲| 不卡一区中文字幕| 久久在线中文字幕| 成人春色在线观看免费网站| 欧美激情女人20p| 亚洲AV无码国产精品午夜字幕 | 亚洲 欧美 中文字幕| 99精品欧美一区二区三区小说| 欧美做暖暖视频| 日韩一区二区三区色| 欧美精品免费在线观看| 成人黄色免费视频| 亚洲尤物在线视频观看| 性折磨bdsm欧美激情另类| 综合av在线| 成人av电影免费| 国内老司机av在线| 亚洲国产成人精品久久| 一级免费在线观看| 91老师国产黑色丝袜在线| 国产综合免费视频| 欧美系列电影免费观看| 国产精品一区二区久久精品| 免费网站成人| 日韩欧美一区二区视频| 日产精品久久久久| 久久综合久久鬼色中文字| 97在线免费公开视频| 欧美限制电影| 91在线观看免费高清完整版在线观看| 天堂av资源在线观看| 亚洲第一在线视频| 无码人妻丰满熟妇精品| 中文字幕一区二区视频| 性一交一黄一片| 亚洲毛片网站| 日本最新一区二区三区视频观看| 欧美日韩破处视频| 欧美精品videossex性护士| 男男激情在线| 91精品中文字幕一区二区三区| 免费日韩在线视频| 久久理论电影网| www.国产视频.com| 精品91视频| 亚洲欧洲一区二区在线观看| 一区二区三区在线免费看| 2020国产精品视频| 黄色一级片在线观看| 日韩电影免费观看在线观看| 欧美高清69hd| 亚洲国产精品影院| 欧美一区二区三区粗大| 国产激情一区二区三区四区| 97国产精东麻豆人妻电影 | 中日韩午夜理伦电影免费| 国产美女主播在线观看| 欧美性猛xxx| 国产真实乱在线更新| 91亚洲国产成人精品一区二三| 久久撸在线视频| 亚洲经典视频在线观看| 伊人久久大香线蕉av一区| 久久a爱视频| 91精品视频专区| 久久毛片亚洲| 久久免费精品日本久久中文字幕| 成人18在线| 亚洲精品久久久一区二区三区| 一区二区三区亚洲视频| 欧美性xxxx极品高清hd直播| 黄色香蕉视频在线观看| 国产午夜亚洲精品理论片色戒 | 7m精品国产导航在线| 国产免费一区二区三区在线观看 | 老司机精品视频在线观看6| 日韩精品在线免费| www.黄色小说.com| 欧美性xxxxxx少妇| 日日摸天天添天天添破| 亚洲一区二区偷拍精品| 亚洲 欧美 变态 另类 综合| 久久综合色鬼综合色| 在线xxxxx| 国产成人丝袜美腿| 做a视频在线观看| 青青草一区二区三区| 久久婷婷国产精品| 国产精品日本| 人妻少妇精品久久| 国产精品v亚洲精品v日韩精品| 一本一本久久a久久精品综合妖精| 天堂一区二区三区四区| 激情伦成人综合小说| 成人高潮a毛片免费观看网站| 91传媒免费看| 日韩影片在线观看| 99在线视频首页| 国产一区二区三区黄网站| 国产色婷婷国产综合在线理论片a| 丝袜美腿一区| 日本亚洲欧美三级| 卡通欧美亚洲| 国产suv精品一区二区| 成人国产二区| 国产精品电影观看| 123成人网| 成人免费福利在线| 精品国产三级| 97超碰最新| 亚洲国产精品免费视频| 不卡一区二区三区视频| 国产精品极品在线观看| 精品蜜桃传媒| 午夜欧洲一区| 日本一区二区精品| 日韩中文在线电影| 久久久成人精品一区二区三区| 91蜜臀精品国产自偷在线| 亚洲国产精品一区二区第一页| 色135综合网| 中国老女人av| 亚洲国产高清一区| 欧美日韩黄色一级片| 视频精品一区二区| 天天操狠狠操夜夜操| 国产激情一区二区三区| 黑丝av在线播放| 国产午夜亚洲精品午夜鲁丝片| 国内毛片毛片毛片毛片毛片| 无码一区二区三区| 国产精品国产三级国产普通话99 | 一区二区三区中文字幕在线观看| www.av免费| 亚洲va国产va欧美va观看| 国产嫩bbwbbw高潮| 欧美色老头old∨ideo| 国产精品无码久久久久成人app| 日韩一二三区视频| 性高潮久久久久久久久久| 在线观看日韩专区| 2024最新电影免费在线观看| 午夜精品久久久久久久久久久久久| 亚洲天堂免费电影| 成人精品一区二区三区电影黑人| 国产suv精品一区二区四区视频| 欧美日韩一区综合| 亚洲一区在线| 国模吧无码一区二区三区| 久草精品在线观看| 国产精品久久AV无码| 国产精品久久三区| 中日韩精品视频在线观看| 欧美性做爰猛烈叫床潮| 精品国产伦一区二区三区| 亚洲欧美国内爽妇网| 婷婷色在线资源| 国产精品麻豆va在线播放| 99re热精品视频| 亚洲成人自拍视频| 国产欧美精品久久| 亚洲色图欧美自拍| 久久精品一区四区| 国产在线视频第一页| 欧美视频在线一区| 日韩精品123| 欧美—级a级欧美特级ar全黄| 成人免费av电影| 精品一区二区三区视频日产| 91精品亚洲| 丝袜制服一区二区三区| 99re视频精品| 日韩女优一区二区| 欧美熟乱第一页| 九九在线视频| 91国内在线视频| 亚洲2区在线| 致1999电视剧免费观看策驰影院| 久久免费国产| 免费的av网站| 亚洲国产视频a| 国产情侣激情自拍| 色小说视频一区| 国产一区一一区高清不卡| 久久精品一二三区| 亚洲狠狠婷婷| 国产精品无码自拍| 亚洲三级电影全部在线观看高清| jizz国产在线| 亚洲人成在线观看网站高清| 国产va在线视频| 激情小说网站亚洲综合网| 欧美日韩一区自拍| 日韩成人av免费| 一色屋精品亚洲香蕉网站| 在线免费观看一区二区| 亚洲欧洲高清在线| 黑人精品一区| 日产国产精品精品a∨| 视频一区中文字幕| 少妇久久久久久久久久| 欧美日韩在线影院| 亚洲欧洲精品视频| 5566成人精品视频免费| 日本久久成人网| 少妇无码av无码专区在线观看| 成人的网站免费观看| 精品视频一区二区在线观看| 欧美成人一级视频| 日本孕妇大胆孕交无码| 成人免费在线看片| 亚洲精品系列| 熟女少妇一区二区三区| 色婷婷综合久色| www.国产精品.com| 成人精品视频99在线观看免费| 亚洲精品一区二区在线看| 日本亚洲一区二区三区| 亚洲黄色尤物视频| 人妻精品一区二区三区| 88国产精品欧美一区二区三区| 日韩中出av| 成人黄色一区二区| 国产精品成人一区二区艾草 | 亚洲精品视频网上网址在线观看| 一根才成人网| 亚洲精品一品区二品区三品区| 精品制服美女丁香| 免费一级全黄少妇性色生活片| 亚洲变态欧美另类捆绑| jizz内谢中国亚洲jizz| 午夜午夜精品一区二区三区文| 久久99精品久久久久| 久久久久黄色片| 亚洲男人的天堂在线| 亚洲狼人综合| 黄色片网址在线观看| 久久精品一区二区三区不卡| 一级aaaa毛片| 欧美激情亚洲视频| 国产精品欧美在线观看| 看看黄色一级片| 五月天亚洲婷婷| 91视频在线观看| 国产亚洲精品久久飘花| 日韩电影在线一区二区| 九九九久久久久| 亚洲精品日韩在线| 国产精久久久| 无码人妻h动漫| 亚洲天堂福利av| 暖暖视频在线免费观看| 成人高清视频观看www| 亚洲理论在线| caoporn91| 亚洲欧洲国产伦综合| 日韩影片在线观看| 黄色免费网址大全| 婷婷中文字幕综合| 成码无人av片在线观看网站|