Jerry:hi抖仅,Tom,要出門嗎坊夫?
Tom:(躍躍欲試想抓Jerry)是啊,去面試撤卢,但是來得及吃個(gè)早餐环凿,嘿嘿嘿。
Jerry:我可是來幫你哦放吩,聽說你是在找Java程序員的工作智听,那我問問你hashmap你了解嗎?
Tom:當(dāng)然了屎慢,為了找到高薪工作,我可是把抓老鼠的時(shí)間都用來準(zhǔn)備面試了忽洛。(得意)對(duì)于Java來說腻惠,集合的祖父?jìng)冎挥袃蓚€(gè)人,Collection和Map欲虚,他們都比較爭(zhēng)氣集灌,有一個(gè)有序的兒子和一個(gè)無序的兒子,Collection的是Set和List复哆,Map的則是HashMap和TreeMap欣喧。你所說的hashmap就是Map的無序兒子啦!怎么樣梯找,我厲害吧唆阿?!
Jerry:不錯(cuò)不錯(cuò)锈锤,那我再問你hashMap的實(shí)現(xiàn)原理是什么呢驯鳖?
Tom:實(shí)現(xiàn)原理闲询。。浅辙。我沒用過扭弧,怎么知道。
Jerry:學(xué)以致用记舆,學(xué)會(huì)了才能用鸽捻,不會(huì)怎么能用呢。要是這塊奶酪給我泽腮,我就給你講講hashmap御蒲。
Tom:你這只臭老鼠!好吧盛正,找到工作不愁沒奶酪删咱。
Jerry:hashMap他是Java面試必考的一種集合類型,無論你是校招生還是工作幾年豪筝。要想了解HashMap我們首先要知道痰滋,hashmap的構(gòu)成(是什么?),HashMap為什么會(huì)出現(xiàn)(為什么?)续崖,以及它有哪些方法敲街,怎么應(yīng)用?(怎么用?)
Tom:哇Q贤(兩眼放光)沒想到你這么有見解多艇。
Jerry:(繼續(xù)說道)首先hashmap是什么呢?下面這個(gè)就是hashmap的結(jié)構(gòu)圖像吻。
Tom:暈(?人?)峻黍。
Jerry:(嘆氣) 知道你暈了,我會(huì)講的拨匆。如你剛才所說姆涩,HashMap是Map的兒子,所以他他做到了繼承父業(yè)的同時(shí)惭每,又?jǐn)U展了自己骨饿。首先我們都知道hashmap是由"數(shù)組+鏈表"組成的,這個(gè)橫向的就是"數(shù)組"台腥,數(shù)組后面可以為空宏赘,也可以跟著一串"鏈表"。這個(gè)Entry就是hashmap的組成單元黎侈,其中key,value,hash,next就是他的組成元素察署。
Tom:我懂了,就好像hashmap是一個(gè)大盒子峻汉,里面裝著很多小盒子(entry)手拉手,小盒子中key,value,hash,next箕母。key顧名思義储藐,就是找到這個(gè)小盒子的鑰匙。value就是你實(shí)際想用的值嘶是,hash钙勃?,next則是小盒子后面的小盒子聂喇。
Jerry:看來你基礎(chǔ)很不錯(cuò)辖源,沒錯(cuò),這就是Hashmap的基本組成了希太。這就是hashmap是什么了克饶。
Jerry:(繼續(xù)說道)那么HashMap為什么會(huì)出現(xiàn)呢?這就要追溯到他的父親Map上了誊辉。舉個(gè)例子矾湃,我要存儲(chǔ)一個(gè)<"一只抓不到老鼠的傻貓"、"Tom">,<"Jerry的敵人","Tom">這個(gè)鍵值對(duì)堕澄,你能把它交給Collection的兒子們?nèi)ゴ鎯?chǔ)嗎邀跃?顯然不能,因?yàn)镃ollection中大兒子Set是無序蛙紫,不可重復(fù)的拍屑,小兒子List雖然有序有序,但只能存<1,"聰明的Jerry">坑傅,<2,"傻傻的Tom">僵驰,<3,"一只抓不到老鼠的傻貓">,也許最開始你是記得的唁毒,但是數(shù)據(jù)多了蒜茴,就沒辦法通過1234區(qū)建立聯(lián)系。
Tom:原來是這樣敖鳌粉私!所以當(dāng)我們存儲(chǔ)有意義的鍵值對(duì)時(shí),就要用到Map的相關(guān)實(shí)現(xiàn)類了室谚。
Jerry:對(duì)的毡鉴,Map有很多實(shí)現(xiàn)崔泵,今天我們只說hashmap秒赤。hashmap中的鏈表主要也是為了解決沖突出現(xiàn)的,
Jerry:剛才我們討論了hashmap是什么和為什么憎瘸,那么它怎么用呢入篮?
Tom:是集合的話都會(huì)有g(shù)et和put的方法吧。
Jerry:對(duì)的幌甘,那我們就從這兩個(gè)方法說起潮售。這是get和put方法的源碼痊项。
Tom:暈(?人?)。
Jerry:(嘆氣) 知道你又暈了酥诽,這是面試的重點(diǎn)鞍泉,一定要仔細(xì)聽哦。