每個(gè)java程序員都知道,HashMap是java中最重要的集合類(lèi)之一,也是找工作面試中非常常見(jiàn)的考點(diǎn),因?yàn)镠ashMap的實(shí)現(xiàn)本身確實(shí)蘊(yùn)含了很多精妙的代碼設(shè)計(jì)。
對(duì)于普通的程序員,可能僅僅能說(shuō)出HashMap線程不安全,允許key、value為null,以及不要求線程安全時(shí),效率上比HashTable要快一些。稍微好一些的,會(huì)對(duì)具體實(shí)現(xiàn)有過(guò)大概了解,能說(shuō)出HashMap由數(shù)組+鏈表+RBT實(shí)現(xiàn),并了解HashMap的擴(kuò)容機(jī)制。但如果你真的有一個(gè)刨根問(wèn)題的熱情,那么你肯定會(huì)想知道具體是如何一步步實(shí)現(xiàn)的。HashMap的源碼一共2000多行,很難在這里每一句都說(shuō)明,但這篇文章會(huì)讓你透徹的理解到我們平時(shí)常用的幾個(gè)操作下,HashMap是如何工作的。
要先提一下的是,我看過(guò)很多講解HashMap原理的文章,有一些講的非常好,但這些文章習(xí)慣于把源代碼和邏輯分析分開(kāi),導(dǎo)致出現(xiàn)了大段的文字講解代碼,閱讀起來(lái)有些吃力和枯燥。所以我想嘗試另一種風(fēng)格,將更多的內(nèi)容寫(xiě)進(jìn)注釋里,可能看起來(lái)有些啰嗦,但對(duì)于一些新手的理解,應(yīng)該會(huì)有好的效果。
HashMap結(jié)構(gòu)
首先是了解HashMap的幾個(gè)核心成員變量(以下均為jdk源碼):
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26