JDK1 7和JDK1 8HashMap的區別

2021-10-05 10:37:18 字數 647 閱讀 5441

jdk1.7與jdk1.8中hashmap區別

最重要的一點是底層結構不一樣,1.7是陣列+鍊錶,1.8則是陣列+鍊錶+紅黑樹結構;

jdk1.7中當雜湊表為空時,會先呼叫inflatetable()初始化乙個陣列;而1.8則是直接呼叫resize()擴容;

插入鍵值對的put方法的區別,1.8中會將節點插入到鍊錶尾部,而1.7中是採用頭插;

jdk1.7中的hash函式對雜湊值的計算直接使用key的hashcode值,而1.8中則是採用key的hashcode異或上key的hashcode進行無符號右移16位的結果,避免了只靠低位資料來計算雜湊時導致的衝突,計算結果由高低位結合決定,使元素分布更均勻;

擴容時1.8會保持原鍊錶的順序,而1.7會顛倒鍊錶的順序;而且1.8是在元素插入後檢測是否需要擴容,1.7則是在元素插入前;

jdk1.8是擴容時通過hash&cap==0將鍊錶分散,無需改變hash值,而1.7是通過更新hashseed來修改hash值達到分散的目的;

擴容策略:1.7中是只要不小於閾值就直接擴容2倍;而1.8的擴容策略會更優化,當陣列容量未達到64時,以2倍進行擴容,超過64之後若桶中元素個數不小於7就將鍊錶轉換為紅黑樹,但如果紅黑樹中的元素個數小於6就會還原為鍊錶,當紅黑樹中元素不小於32的時候才會再次擴容。

關於 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之後又引入了紅黑樹 首先我們...