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

面試官:談一談你對HashMap的理解?

開發 后端
HashMap的原理也是大廠面試中經常會涉及的問題,同時也是工作中常用到的Java容器,本文主要通過對以下問題進行分析講解,來幫助大家理解HashMap的原理。

摘要

HashMap的原理也是大廠面試中經常會涉及的問題,同時也是工作中常用到的Java容器,本文主要通過對以下問題進行分析講解,來幫助大家理解HashMap的原理。

  • HashMap添加一個鍵值對的過程是怎么樣的?
  • 為什么說HashMap不是線程安全的?
  • 為什么要一起重寫hashCode()和equal()方法?

1、HashMap添加一個鍵值對的過程是怎么樣的?

這是網上找的一張流程圖,可以結合著步驟來看這個流程圖,了解添加鍵值對的過程。

 

面試官:談一談你對HashMap的理解?

1.初始化table

判斷table是否為空或為null,否則執行resize()方法(resize方法一般是擴容時調用,也可以調用來初始化table)。

2.計算hash值

根據鍵值key計算hash值。(因為hashCode是一個int類型的變量,是4字節,32位,所以這里會將hashCode的低16位與高16位進行一個異或運算,來保留高位的特征,以便于得到的hash值更加均勻分布)

 

面試官:談一談你對HashMap的理解?

3.插入或更新節點

根據(n - 1) & hash計算得到插入的數組下標i,然后進行判斷

table[i]==null

那么說明當前數組下標下,沒有hash沖突的元素,直接新建節點添加。

table[i].hash == hash &&(table[i]== key || (key != null && key.equals(table[i].key)))

判斷table[i]的首個元素是否和key一樣,如果相同直接更新value。

table[i] instanceof TreeNode

判斷table[i] 是否為treeNode,即table[i] 是否是紅黑樹,如果是紅黑樹,則直接在樹中插入鍵值對。

其他情況

上面的判斷條件都不滿足,說明table[i]存儲的是一個鏈表,那么遍歷鏈表,判斷是否存在已有元素的key與插入鍵值對的key相等,如果是,那么更新value,如果沒有,那么在鏈表末尾插入一個新節點。插入之后判斷鏈表長度是否大于8,大于8的話把鏈表轉換為紅黑樹。

4.擴容

插入成功后,判斷實際存在的鍵值對數量size是否超多了最大容量threshold(一般是數組長度*負載因子0.75),如果超過,進行擴容。

源代碼如下:

 

面試官:談一談你對HashMap的理解?

2.為什么說HashMap不是線程安全的?

其實通過學習HashMap添加鍵值對的方法,我們可以看到整個方法內都沒有使用到鎖,所以一旦多線并發訪問,就有可能造成數據不一致的問題,

例如:

如果有兩個添加鍵值對的線程都執行到if ((tab = table) == null || (n = tab.length) == 0)這行語句,都對table變量進行數組初始化,就會造成已經初始化好的數組table被覆蓋,然后前面初始化的線程會將鍵值對添加到之前初始化的數組中去,造成鍵值對丟失。

 

面試官:談一談你對HashMap的理解?

3.為什么要一起重寫hashCode()和equal()方法?

當我們的對象一旦作為HashMap中的key,或者是HashSet中的元素使用時,就必須同時重寫hashCode()和equal()方法

首先看看hashCode()和equal()方法的默認實現

可以看到Obejct類中的源碼如下,可以看到equals()方法的默認實現是判斷兩個對象的內存地址是否相同來決定返回結果。

 

面試官:談一談你對HashMap的理解?

網上很多博客說hashCode的默認實現是返回內存地址,其實不對,以OpenJDK為例,hashCode的默認計算方法有5種,有返回隨機數的,有返回內存地址,具體采用哪一種計算方法取決于運行時庫和JVM的具體實現。

感興趣的朋友可以看看這篇博客 blog.csdn.net/xusiwei1236…

然后看看hashCode()方法,equal()方法在HashMap中的應用

 

面試官:談一談你對HashMap的理解?

為了將一組鍵值對均勻得存儲在一個數組中,HashMap對key的hashCode進行計算得到一個hash值,用hash對數組長度取模,得到數組下標,將鍵值對存儲在數組下標對應的鏈表下(假設鏈表長度小于8,沒有達到轉換為紅黑樹的閥值)。

下面是添加鍵值對的putVal()方法,當數組下標對應的是一個鏈表時執行的代碼

 

面試官:談一談你對HashMap的理解?

可以清楚地看到判斷添加的key與鏈表中已存在的key是否相等的方法主要是e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))), 也就是: 1.先判斷hash值是否相等,不相等直接結束判斷,因為hash值不相等,key肯定不相等。 2.判斷兩個key對象的內存地址是否相等(相等指向內存中同一個對象)。 3.key不為null,調用key的equal()方法判斷是否相等,因為有可能兩個key在內存中存儲的地址不一樣,但是是相等的。 就像是

 

面試官:談一談你對HashMap的理解?

背景

假設我們有一個KeyObject類,假設我們認為兩個KeyObject的屬性a相等,那么KeyObject就是相等的相等的,我們將KeyObject作為HashMap的key,以KeyObject是否相等作為去重標準,不能重復添加KeyObject相等,value不等的值到HashMap中去

 

面試官:談一談你對HashMap的理解?

假設都hashCode()方法和equals()方法都不重寫(結果:HashMap無法保證去重)

執行以下代碼:

 

面試官:談一談你對HashMap的理解?

如果KeyObject的hashCode()方法和equals()方法都不重寫,那么即便KeyObject的屬性a都是1,key1和key2的hashCode都是不相同的,key1和key2調用equals()方法也不相等,這樣hashMap中就可以同時存在key1和key2了。

打印結果:

 

面試官:談一談你對HashMap的理解?

假如只重寫hashCode()方法(結果:無法正確地與鏈表元素進行相等判斷,從而無法保證去重)

執行以下代碼:

 

面試官:談一談你對HashMap的理解?

此時equal()方法的實現是默認實現,也就是當兩個對象的內存地址相等時,equal()方法才返回true,雖然key1和key2的a屬性是相同的,但是他們在內存中是不同的對象,所以key1==key2結果會是false,KeyObject的equals()方法默認實現是判斷兩個對象的內存地址,所以 key1.equals(key2)也會是false,所以這兩個鍵值對可以重復地添加到hashMap中去。

輸出結果:

 

面試官:談一談你對HashMap的理解?

假如只重寫equals()方法(結果:映射到HashMap中不同數組下標,無法保證去重)

 

面試官:談一談你對HashMap的理解?

假設只equals()方法,hashCode方法會是默認實現,具體的計算方法取決于JVM,(測試時發現是內存地址不同但是相等的對象,它們的hashCode不相同),所以計算得到的數組下標不相同,會存儲到hashMap中不同數組下標下的鏈表中,也會導致HashMap中存在重復元素。

輸出結果如下:

 

面試官:談一談你對HashMap的理解?

總結

所以當我們的對象一旦作為HashMap中的key,或者是HashSet中的元素使用時,就必須同時重寫hashCode()和equal()方法,因為hashCode會影響key存儲的數組下標及與鏈表元素的初步判斷,equal()是作為判斷key與鏈表中的key是否相等的最后標準。

所以只重寫hashCode()方法,會導致無法正確地與鏈表元素進行相等判斷,從而無法保證去重)

只重寫equals()方法導致鍵值對映射到HashMap中不同數組下標,無法保證去重

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2021-11-25 10:18:42

RESTfulJava互聯網

2025-01-13 09:24:32

2021-08-09 07:47:40

Git面試版本

2024-09-27 15:43:52

零拷貝DMAIO

2020-12-01 08:47:36

Java異常開發

2025-02-21 15:25:54

虛擬線程輕量級

2020-06-12 15:50:56

options前端服務器

2025-03-21 00:00:05

Reactor設計模式I/O 機制

2022-03-21 09:05:18

volatileCPUJava

2024-10-24 16:14:43

數據傳輸CPU零拷貝

2025-08-18 00:00:00

零拷貝系統調用函數

2021-05-11 08:48:23

React Hooks前端

2024-08-27 12:36:33

2024-06-13 08:01:19

2019-07-26 06:42:28

PG架構數據庫

2024-10-12 16:25:12

2024-09-26 16:01:52

2021-09-16 07:52:18

算法應用場景

2024-08-26 14:52:58

JavaScript循環機制

2019-05-10 10:50:04

Spring AOPJDK動態代理CGLIB動態代理
點贊
收藏

51CTO技術棧公眾號

www.欧美日韩| 日韩激情免费| 欧美午夜精品伦理| 色一情一乱一伦一区二区三区丨 | 国产精品草草| 日韩成人在线视频观看| 欧美国产日韩在线播放| 免费人成在线观看播放视频| 国产精品77777| 91大神在线播放精品| 五月婷婷六月香| 国产丝袜一区| 欧美巨大另类极品videosbest | 国产乱国产乱老熟300| 日韩aaa久久蜜桃av| 337p亚洲精品色噜噜| 欧美国产亚洲一区| 直接在线观看的三级网址| 久久久久久毛片| 国产精品免费观看高清| 91丨porny丨在线中文 | 国产久一一精品| 国产精品99无码一区二区| 精品国产一区探花在线观看| 日韩午夜电影在线观看| 1024av视频| 18网站在线观看| 国产综合久久久久久久久久久久| 97婷婷涩涩精品一区| 日韩一区二区三区四区视频| 高清日韩欧美| 欧美久久婷婷综合色| 欧美精品自拍视频| av网站在线播放| k8久久久一区二区三区| 成人伊人精品色xxxx视频| 精品国产一区二区三区四| 午夜精品毛片| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美一区二区三区不卡| a日韩av网址| 一二三区精品视频| 日韩av电影免费观看| 色呦呦中文字幕| 国产一区二区在线免费观看| 国产成人高清激情视频在线观看| 久久久久成人网站| 亚洲国产日韩欧美在线| 日韩精品视频免费| 黄色片子免费看| 色香欲www7777综合网| 天天影视网天天综合色在线播放 | 奇米影音第四色| 国产精品专区免费| 亚洲成a人片在线不卡一二三区| 亚洲欧美日韩不卡一区二区三区| 欧美亚洲精品在线观看| 国产高清成人在线| 亚洲精品欧美一区二区三区| 少妇又紧又色又爽又刺激视频| 亚洲精品日本| 欧美福利视频在线| 免费在线观看a级片| 欧美日韩国产传媒| 一道本无吗dⅴd在线播放一区| 国产高清自拍视频| 牛牛精品成人免费视频| 亚洲成人999| 熟妇高潮一区二区| 亚洲视频国产| 欧美zozozo| 国产精品二区视频| 亚洲精品在线a| 精品久久久久一区二区国产| 8x8x成人免费视频| 99久久久国产| 欧美一级欧美一级在线播放| 日韩av片免费观看| 精品福利在线| 欧洲精品一区二区三区在线观看| 免费av网址在线| 天然素人一区二区视频| 欧美亚洲综合色| 中文字幕一区久久| 国产一区二区三区视频在线| 欧美一级在线免费| 亚洲性图第一页| 欧美大奶一区二区| 亚洲色图欧美制服丝袜另类第一页| 熟女俱乐部一区二区| 国产欧美一区二区精品久久久| 日韩精品视频免费在线观看| 美女被到爽高潮视频| 欧美理论视频| 久久亚洲欧美日韩精品专区 | 丁香五月缴情综合网| 亚洲精品www| 亚洲国产日韩一区无码精品久久久| 国产亚洲第一伦理第一区| 丝袜美腿亚洲一区二区| 九九九免费视频| 国产视频一区欧美| 国产欧美中文字幕| 欧美一级在线免费观看| 久久久99精品久久| 亚洲综合欧美日韩| 2024短剧网剧在线观看| 欧美日韩免费在线观看| 久久久久久久久久一区| 国产乱论精品| 亚洲色图五月天| 欧美黄色一级网站| 美女91精品| 亚洲xxxxx性| 图片区 小说区 区 亚洲五月| 久久久综合激的五月天| 久久婷婷开心| 嫩草香蕉在线91一二三区| 亚洲v日本v欧美v久久精品| 波多野结衣天堂| 亚洲一区二区电影| 中文字幕欧美国内| 日本特黄特色aaa大片免费| 日韩制服丝袜av| aaa级精品久久久国产片| 天堂a中文在线| 亚洲色图欧美在线| 一本久道中文无码字幕av| 6080亚洲理论片在线观看| 一区二区三区在线播放欧美| 欧美成人aaaaⅴ片在线看| 国产日韩专区| 成人免费视频网| 你懂的在线网址| 一个色在线综合| 日本xxxx黄色| 日韩精品丝袜美腿| 欧美日韩国产va另类| 中文字幕人妻互换av久久 | 色88888久久久久久影院按摩| 真实乱偷全部视频| 99精品美女| 欧美一级电影久久| 四虎永久在线精品免费网址| 亚洲欧美经典视频| 一道本视频在线观看| 天堂一区二区三区四区| 久久久视频在线| av网站在线观看免费| 国产精品丝袜黑色高跟| 黄色一级大片在线观看| 欧美一级三级| 午夜免费久久久久| 免费av一级片| 亚洲一区在线看| 免费看的av网站| 91成人精品| 亚洲最大激情中文字幕| 麻豆tv免费在线观看| 在线观看精品一区| 国产美女喷水视频| 久久久人人人| 欧美一区二区三区四区夜夜大片 | 成人午夜在线| 亚洲免费视频一区二区| 国产一级18片视频| 99久久er热在这里只有精品66| 性高湖久久久久久久久aaaaa| 免费看一区二区三区| 久久在线视频在线| 精品国产999久久久免费| 亚洲欧美偷拍卡通变态| 日批视频在线看| 欧美精品福利| 国产精品一区二区欧美| 成人免费网站观看| 精品福利二区三区| 日韩特级黄色片| 国产校园另类小说区| 男女男精品视频站| 三区四区不卡| 91传媒视频在线观看| 欧美色图天堂| 亚洲男人第一av网站| 69av视频在线观看| 亚洲天堂精品在线观看| 能看毛片的网站| 91精品推荐| 亚洲一区亚洲二区亚洲三区| 欧美日韩国产观看视频| 亚洲天堂免费观看| 中文字幕一区二区三区波野结| 国产精品久久久久影院| 亚洲熟妇一区二区| 国产精品一页| 亚洲国产一区二区三区在线播| 亚洲欧洲专区| 久久久久久国产精品美女| 五月天激情开心网| 欧美亚洲丝袜传媒另类| 2021亚洲天堂| 久久综合久久综合九色| 欧美精品一区二区三区免费播放| 欧美疯狂party性派对| 成人免费在线看片| 综合在线影院| 美女精品视频一区| 日本一卡二卡四卡精品| 欧美乱妇23p| 日本一区二区免费在线观看| 久久久噜噜噜久久中文字幕色伊伊| 国产又大又黄又猛| 亚洲黄色三级| 亚洲欧洲三级| 欧美国产不卡| 亚洲a成v人在线观看| 欧美大片高清| 欧美劲爆第一页| jizz视频在线观看| 欧美精品一区二区三区久久久| 国产精品男女视频| 亚洲欧美日韩小说| 法国空姐电影在线观看| 国产成人精品免费一区二区| 亚洲乱码国产一区三区| 黄色国产精品| 亚洲国产精品123| 国内精品偷拍| 91在线免费视频| 悠悠资源网亚洲青| 欧美日韩国产123| 在线免费看黄网站| 亚洲精品中文字幕有码专区| 国产成a人亚洲精v品无码| 色国产综合视频| 久久久久成人网站| 亚洲欧洲成人自拍| 一区二区伦理片| 99视频热这里只有精品免费| 亚洲制服在线观看| 日本v片在线高清不卡在线观看| 日本中文字幕网址| 天天综合网91| 亚洲欧美国产精品桃花| 国产尤物久久久| 久久亚洲精品欧美| 欧美交a欧美精品喷水| 成人精品水蜜桃| 久久一级大片| 成人性教育视频在线观看| 久久久免费人体| 国产精品流白浆视频| 亚洲承认视频| 91国语精品自产拍在线观看性色 | 久久麻豆一区二区| 亚洲观看黄色网| av激情综合网| 日韩成人av一区二区| www.亚洲人| 尤物网站在线观看| www.av精品| 9.1成人看片| 91麻豆福利精品推荐| 自拍视频一区二区| 91论坛在线播放| 乳色吐息在线观看| 国产99久久久国产精品| 国模大尺度视频| 成人av网址在线| 好男人香蕉影院| 99久久国产综合精品女不卡| av网站有哪些| 久久久www免费人成精品| 美女100%露胸无遮挡| 国产精品乱码妇女bbbb| 99精品中文字幕| 亚洲欧美日韩中文播放| 欧美日韩一级大片| 亚洲天堂久久久久久久| 日韩精品视频免费看| 色综合中文字幕| 中文字幕在线日本| 欧美三级中文字幕在线观看| 中文字幕 亚洲视频| 制服丝袜激情欧洲亚洲| www.av在线.com| 精品一区电影国产| av在线收看| 久久精品国产亚洲一区二区| 超碰人人在线| 欧美有码在线视频| jvid一区二区三区| 亚洲一区二区三区视频| 99久久免费精品国产72精品九九| 国产欧美丝袜| 激情综合网五月| 日本特级黄色大片| 亚洲黄色影片| 欧美日韩怡红院| 国产大片一区二区| 国产伦精品一区二区三区88av| 久久精品人人做| 男的操女的网站| 精品久久久一区| 中文字幕第99页| 日韩午夜电影av| 日本一级在线观看| 久久视频在线看| 中文字幕 在线观看| 成人免费福利在线| 综合亚洲色图| 97在线国产视频| 另类小说一区二区三区| 亚洲啪av永久无码精品放毛片| 久久久久9999亚洲精品| 国产精品 欧美激情| 色一情一乱一乱一91av| 国产成人精品a视频| 中文字幕九色91在线| 岛国片av在线| 成人免费在线视频网址| 欧美黄色一级| 97超碰免费观看| 久久综合九色| japanese在线观看| 亚洲日穴在线视频| www.日韩一区| 亚洲国产精品网站| 免费在线午夜视频| 热久久这里只有精品| 国产在线不卡一区二区三区| 神马影院一区二区| 一本久久综合| 久久久久久国产精品日本| 中文文精品字幕一区二区| 91美女免费看| 精品国精品国产| 国产视频在线播放| 国产精品精品视频一区二区三区| 精品日产乱码久久久久久仙踪林| 免费观看黄色大片| 久久久天天操| a级在线免费观看| 欧美视频在线观看 亚洲欧| 性生交大片免费看女人按摩| 色妞在线综合亚洲欧美| 欧美中文字幕精在线不卡| 国产一区在线免费| 狠狠干综合网| 欧美污在线观看| 亚洲免费观看在线视频| 五月天中文字幕| 日韩视频免费在线| 成人国产一区| 视频一区二区三区免费观看| 日韩专区在线视频| 人妻体内射精一区二区| 欧美日韩国内自拍| 亚洲区小说区图片区| 97av在线视频| 久久精品凹凸全集| 国产1区2区3区中文字幕| 国产精品亚洲视频| √天堂中文官网8在线| 91精品欧美久久久久久动漫 | 免费高清在线一区| 五月婷婷欧美激情| 在线观看一区二区视频| 日本国产在线| 国产ts人妖一区二区三区 | 亚洲精品短视频| 国产在线精彩视频| 国产精品对白刺激久久久| 一区二区动漫| www.狠狠爱| 欧美丝袜丝交足nylons| 日本最黄一级片免费在线| 亚洲精品日韩av| 日韩五码在线| 亚洲国产av一区| 欧美日韩一区二区在线观看 | 国产尤物一区二区在线| 欧美色图一区二区| 日韩的一区二区| 视频二区不卡| 亚洲午夜精品久久久久久浪潮| 久久国产精品露脸对白| 久久久久99精品成人片试看| 亚洲国产精品国自产拍av秋霞| 国产99在线观看| 欧美重口乱码一区二区| 国产一区二区精品久久| 日韩av综合在线| 亚洲深夜福利在线| 亚洲ww精品| 久久这里只有精品18| 久久久亚洲欧洲日产国码αv| 在线免费观看一级片| 欧美黄色免费网站| 91亚洲无吗|