一 1.8之前雜湊表主要由陣列加上鍊表組成(拉鍊法解決衝突)。
1.8 之後由陣列和鍊錶或者紅黑樹組成,當滿足以下兩個條件的時候,鍊錶會轉換成紅黑樹。
鍊錶的長度大於8
陣列的長度大於64
二 hash()變了,變的更加簡單,衝突更少了。
如下是1.8的方法
static final int hash(object key)
如下是1.7的方法
static int hash(int h)
四 當需要擴容的時候,1.7是插入前擴容,1.8是插入成功後擴容。
concurrenthashmap是執行緒安全的。
1.7下實現執行緒安全是通過segment + hashentry陣列 + 鍊錶實現的,預設16個segment;
1.8下拋棄了segment,採用了node陣列 + 鍊錶/紅黑樹實現。使用synchronized鎖 和 cas來實現執行緒安全。
關於 JDK1 7 和 JDK1 8 的區別
jdk1.8 在 jdk1.7的基礎上新增了如下功能 1 default關鍵字 實現的介面中如果有 default 修飾的方法,實現類可以不重寫此方法 2 lambda 表示式,函式式程式設計,函式式程式設計就是一種抽象程度很高的程式設計正規化,對一些只使用一次的介面的編碼進行了優化 3 函式式介面...
JDK1 8中的hashmap和JDK1 7的區別
1.資料插入的方式不同 jdk1.7用的是頭插法,而jdk1.8用的是尾插法,這是由於jdk1.7是用單鏈表進行的縱向延伸,當採用頭插法時會容易出現逆序且環形鍊錶死迴圈問題。但是在jdk1.8之後是因為加入了紅黑樹使用尾插法,能夠避免出現逆序且鍊錶死迴圈的問題。2.組成結構不同 jdk1.7的時候使...
jdk1 7與jdk1 8的HashMap區別詳解
首先我們來談談hashmap,從字面上來看,hashmap的名字中帶有hash,我們就可以聯想到hashmap的儲存方式可能與hash有關。下面我們來談談hashmap的儲存機制 hashmap是以鍵值對的形式儲存資料的,其底層儲存是以陣列 鍊錶的方式實現的 jdk1.8之後又引入了紅黑樹 首先我們...