HashMap--concurrentHashMap的一些知識蒐集

目錄

HashMap

ConCurrentHashMap


面試中經常會被問道:

面試官:有了解HashMap嗎,講一下HashMap吧~

我:呃呃呃~是這樣的,balabalbala~

 蒐集了網上的一些資料,估計也不全,大致也能說明白這個道理,(僅作爲面試參考):
這個事情要從JDK的版本更新說起,話說現在,風雲跌宕,大家都講:我們支持的JDK版本最低爲1.8~


好,這就是一個目前的分界線了。

先翻歷史,再論現在。

HashMap

JDK1.7

這個版本-HashMap的底層使用數組加鏈表實現。根據key計算出數據下標,如果多個key對應到同一個下標,就用鏈表串起來,新插入的放在前面。

JDK1.8

這個版本有了一些變化,底層使用數組+鏈表/紅黑樹來實現的。鏈表長度超過8,就轉紅黑樹,紅黑樹大小小於6就轉回鏈表

key是如何Hash的呢?

// java HashMap 
static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

不夠我說的,太少了,再來點--好的,滿足你-

-推薦-唐彤--zhisheng(公衆號)--的文章--面試官:HashMap 源碼你都不知道還來面試?

tips:除了這些底層結構,加上get --set--這些方法打出來更好--絕對加分項

ConCurrentHashMap

JDK1.7

在Hashmap的基礎上,把數據分爲了多個segment段,默認16個段,以段來進行加鎖操作,提高併發效率。

JDK1.8

取消了,大部分操作不加鎖了(紅黑樹的鎖依然存在,如不瞭解,懂我意思,此處暫不談論)

不使用Segment分段加鎖控制,轉爲使用Node+CAS+Synchronized來實現,鎖的粒度轉爲HashEntry(首節點)

 

這些看完覺得不夠,怎麼夠面試說的呢~,這樣有辦法

推薦 廝大 (公衆號-朱小廝的博客)的一篇文章-叫做--爲什麼ConcurrentHashMap的讀操作不需要加鎖?

 

那你要問HashTable,那這樣,遙遠的從前 java 5開始有了JUC的包,那是已經轉用ConcurrentHashMap而不是HashTable了

好了,給你文章,你自己看吧~

知乎問題: HashMap和Hashtable的區別?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章