再學Java 之 HashMap的底層實現

今天參加歡聚時代的面試,我說我本身依靠本身的理解從新實現過HashMap。描述我本身的實現思想後,面試官問「hashmap」底層若是用數組不是效率比較低嗎,不是更應該用紅黑樹嗎?我一會兒就蒙了。用數組的確效率比較低,可是當初對比JDK的源碼發現,JDK的確是使用數組+鏈表來存儲實體。php

回來後,急忙看了一下源碼,也對比了一下JDK6 和JDK 8的HashMap,發現了不太對勁的地方。原來,當初看的是JDK 6。在這個版本的JDK的確是使用數組+鏈表來存儲。可是到了JDK 8 的時候,爲了解決碰撞,JDK提出了一種新的方式,即,規定一個因子,一開始是用數組+鏈表來存儲,當大於這個因子時,鏈表轉化爲紅黑樹。也就是說JDK 8的版本使用了數組+鏈表/紅黑樹。html

這一週還比較忙。等忙完了在寫一篇博文從源碼分析一下JDK 8 改進的地方。java

 

PS:這種經過判斷存儲實體所佔比例,採用不一樣的處理方式。不只在這裏出現。還在數組工具類中出現過。即Arrays.sort();根據數組個數採用普通排序或者快速排序。web

 

參考資料:面試

一、http://www.jetbrains.com/idea/webhelp/comparing-files.html數組

二、http://coderbee.net/index.php/java/20131018/519ide

三、http://developer.51cto.com/art/201404/437062.htm工具

相關文章
相關標籤/搜索