欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

HashMap面試題匯總(附答案)

  發(fā)布時間:2020-03-31 16:29:39   作者:it_noone   我要評論
這篇文章主要介紹了HashMap面試題匯總,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1,HashMap底層存儲結(jié)構(gòu)

HashMap在Jdk1.7的時候采用的是數(shù)組加鏈表的數(shù)據(jù)結(jié)構(gòu),jdk1.8之后采用了數(shù)組加鏈表加紅黑樹的數(shù)據(jù)結(jié)構(gòu)。觀察源碼可知HashMap類中有一個非常重要的字段就是Node[] table,即哈希桶數(shù)組。而Node是HashMap的一個內(nèi)部類,實現(xiàn)了Map.Entry接口,本身就是一個鍵值對。

2,解決Hash沖突的方法,HashMap采用了什么方法解決Hash沖突?

HashMap使用哈希表來存儲數(shù)據(jù)的,當(dāng)然哈希表不可避免的就會遇到hash沖突問題,解決hash沖突的方法大致有兩種:1,開放地址法。2,鏈地址法。

1,開放地址法:當(dāng)?shù)刂钒l(fā)生沖突時,按著某種方法繼續(xù)探測哈希表中的其他存儲單元,直到找到空位置為止。

2,鏈地址法:鏈地址法就是數(shù)組加鏈表的結(jié)合,在每一個數(shù)組元素上都有一個鏈表結(jié)構(gòu),當(dāng)?shù)刂钒l(fā)生沖突時就講數(shù)據(jù)存放在鏈表中。

而HashMap就是采用鏈地址法進行解決hash沖突的。

3,jdk1.8的HashMap中的鏈表達到多少個時會生成紅黑樹?

HashMap用鏈地址法解決hash沖突,則當(dāng)鏈表里的長度太長就會嚴(yán)重影響HashMap的性能。于是在jdk1.8里,對數(shù)據(jù)結(jié)構(gòu)做了進一步優(yōu)化,引入了紅黑樹,當(dāng)鏈表長度大于8的時候,鏈表就會轉(zhuǎn)成紅黑樹,利用紅黑樹快速增刪改查的特點提高HashMap的性能,其中會用到紅黑樹的插入、刪除、查找等算法。

3,HashMap初始值的大小和負(fù)載因子的大小?

hashMap初始長度就是16,負(fù)載因子是0.75。HashMap所容納的最大數(shù)據(jù)量為:長度*負(fù)載因子。即當(dāng)長度達到這個值的時候就會發(fā)生擴容。

4,HashMap擴容機制

擴容(resize)就是重新計算容量,向HashMap對象里不停的添加元素,而HashMap對象內(nèi)部的數(shù)組無法裝載更多的元素時,對象就需要擴大數(shù)組的長度,以便能裝入更多的元素。當(dāng)然Java里的數(shù)組是無法自動擴容的,方法是使用一個新的數(shù)組代替已有的容量小的數(shù)組,就像我們用一個小桶裝水,如果想裝更多的水,就得換大水桶。底層是resize方法中的transfer方法將原有的Entry數(shù)組的元素拷貝到新的Entry數(shù)組里,擴容都是以2的N次冪進行擴容 一般是2倍。

5,HashMap線程安全問題 HashTable ConcurrentHashMap

HashMap是線程不安全的,多個線程同時寫HashMap可能會導(dǎo)致數(shù)據(jù)的不一致。如果需要滿足線程安全可以用ConcurrentHashMap,還有一個HashTable。但是HashTable是繼承自Dictionary類,HashTable容器使用synchronized來保證線程安全,但在線程競爭激烈的情況下,HashTable的效率非常低下,ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成,采用segment分段鎖來保證線程安全。

HashTable無論key或value都不能為null,HashMap只能允許一個key為null,可以運行多個value為null。而且HashTable是線程安全的,HashMap是線程不安全的。

6,HashMap鏈表成環(huán)

由于HashMap線程不安全的,至于為何不安全,什么時候會出現(xiàn)問題,這里來討論一下:

當(dāng)有多個線程共同操作hashMap的put方法時,這個時候hashMap容量不夠了,兩個線程都去擴容執(zhí)行resize方法,在這個時候cpu切換資源的話,會造成鏈表成環(huán)問題,死循環(huán)問題。

到此這篇關(guān)于HashMap面試題匯總(附答案)的文章就介紹到這了,更多相關(guān)HashMap面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • HashMap的面試題整理小結(jié)

    HashMap存儲鍵值對實現(xiàn)快速存取,允許為null。key值不可重復(fù),若key值重復(fù)則覆蓋。本文給大家分享HashMap的面試題,非常不錯是小編日常收集整理,具有一定的參考借鑒價值,
    2020-02-17

最新評論