hashmap面試擴容機制 hashmap在,擴容,時為什么是乘以2?
hashmap在,擴容,時為什么是乘以2?長度為2的n次方,取模運算可以用位操作h&(length-1)來求得,這樣效率最高為什么HashMap的數(shù)組長度一定是2的次冪?兩個原因1.查找和增加元
hashmap在,擴容,時為什么是乘以2?
長度為2的n次方,取模運算可以用位操作h&(length-1)來求得,這樣效率最高
為什么HashMap的數(shù)組長度一定是2的次冪?
兩個原因
1.查找和增加元素是使用的取模運算來找到數(shù)組下標,而取模運算如果是對2的n次冪,那么可以用&位運算符代替,效率比較高。
2.擴容的時候方便。
直接看源碼就明白了,擴容的resize方法的參數(shù)是2*table.length(圖中是JDK7的源碼),意味著每次擴容都是2倍擴容,擴容之后就需要進行數(shù)據(jù)遷移了。如果初始長度是2的n次冪,擴容就會減少數(shù)據(jù)的遷移次數(shù)。
舉個例子初始長度是16,擴容到32后。之前在1位置的節(jié)點,擴容之后之后只會遷移到1和17的位置,其實就是之前在i的位置,擴容之后只會在i和i 之前數(shù)組的長度。
比如17,在數(shù)組長度是16的時候,在1的位置,當擴容到32后,就會遷移到17的位置
比如1,在數(shù)組長度是16的時候,在1的位置,當擴容到32后,還在1的位置。
主要就是這個原因了。
順便提下源碼里就是你不設(shè)置為2的n次冪,也會幫你設(shè)置為2的n次冪,比如說你傳15,會幫你設(shè)置為16的,源碼對應(yīng)的方法是roundUpToPowerOf2。
希望對你有幫助??梢躁P(guān)注我,會分享一些源碼思路的知識
精通spring全家桶,被15家公司拒絕,大專程序員出路在哪?
看你的情況,說明你對自己還是比較自信,認為自己卻掌握了比較全方位的技術(shù),但是在面試過程中你屢屢碰壁,連續(xù)被多家單位和企業(yè)拒絕,拋開他們是否有眼光不說,這其中肯定有你自己的問題。建議你在以下幾個方面,查找自己面試過程中的不足。
1.是否把你的能力真正的展示出來了。
作為技術(shù)員而言,學(xué)歷是一個方面,可以作為一個參考,但并不是最重要,最重要的是有實打?qū)嵉募夹g(shù)。企業(yè)需要的是能夠解決問題的技術(shù)員,而不是需要學(xué)歷高的技術(shù)員,這一點是很肯定的,所以你不必過于在意自己學(xué)歷不高的問題。如果是要需要學(xué)歷撐門面的話,本科研究生或許都什么用,至少也要找一個專家來撐門面。所以,很有可能是在你在面試的過程中,你并沒有把自己的能力真正的完全的展示出來。
2.是否有自己的代表作品。
企業(yè)在面試的過程中,通常都會與應(yīng)聘者進行溝通,但是這些溝通都比較宏觀,也是一種感性的認識。你在面試的過程中,除了你介紹自己的技術(shù)全面之外,如果你能夠拿出自己具有代表性的作品,那么可以增強你的說服力,大大增加自己應(yīng)試的籌碼。
3.是否對自己的工作經(jīng)歷進行了系統(tǒng)梳理。
企業(yè)招聘人員的時候,要在短時間認識和了解一個人,本身這是一項難度很高的事情,所以給每個應(yīng)聘者的時間并不是很多。那么,你在面試之前,要對自己的工作經(jīng)歷,取得的業(yè)績或成果,對未來的發(fā)展設(shè)想,進行系統(tǒng)全面的梳理,以便于更高效的與相關(guān)的招聘人員進行溝通。不能以為自己是理工科類別,干的是技術(shù)活,就不需要梳理和總結(jié)。
祝你能早日找到滿意的工作。
map擴容為什么是2倍?
map計算添加元素的位置時,使用的位運算,這是特別高效的運算;另外,HashMap的初始容量是2的n次冪,擴容也是2倍的形式進行擴容,是因為容量是2的n次冪,可以使得添加的元素均勻分布在HashMap中的數(shù)組上,減少hash碰撞,避免形成鏈表的結(jié)構(gòu),使得查詢效率降低。