1. 程式人生 > >JDK7和JDK8中HashMap實現的區別?

JDK7和JDK8中HashMap實現的區別?

在JDK7中,HashMap是基於一個數組和多個連結串列的實現**(位桶+連結串列)**,當遇到雜湊衝突時,就將對應的元素以連結串列的形式儲存。但是這樣子的話HashMap的效能就會比較低,因為如果當資料比較多,發生衝突的元素也會越來越多,這時候連結串列中就會儲存有很多元素,在查詢上會消耗O(n)的時間。

因為在最壞的情況,連結串列的時間複雜度為O(n),而紅黑樹為O(logn),當連結串列中的元素達到某個閥值時,使用紅黑樹的效率會比較高。

所以在JDK8中,採用的是位桶+連結串列/紅黑樹的方式,也是非執行緒安全的,當同一個hash值的節點數不小於8時,將不再以單鏈表的形式儲存了,會被調整成一顆紅黑樹,這就是JDK7與JDK8中HashMap實現的最大區別。