void transfer(entry newtable, booleanrehash)
int i =indexfor(e.hash, newcapacity);
e.next =newtable[i];
newtable[i] =e;
e =next;
} }
}
當hashmap中的元素越來越多的時候,
hash
衝突的機率也就越來越高,因為陣列的長度是固定的。所以為了提高查詢的效率,就要對
hashmap
的陣列進行擴容,陣列擴容這個操作也會出現在
arraylist
中,這是乙個常用的操作,而在
hashmap
陣列擴容之後,最消耗效能的點就出現了:原陣列中的資料必須重新計算其在新陣列中的位置,並放進去,這就是
resize
。那麼hashmap什麼時候進行擴容呢?當
hashmap
中的元素個數超過陣列大小
*loadfactor
時,就會進行陣列擴容,
loadfactor
的預設值為
0.75
,這是乙個折中的取值。也就是說,預設情況下,陣列大小為
16,那麼當
hashmap
中元素個數超過
16*0.75=12
的時候,就把陣列的大小擴充套件為
2*16=32
,即擴大一倍,然後重新計算每個元素在陣列中的位置,而這是乙個非常消耗效能的操作,所以如果我們已經預知
hashmap
中元素的個數,那麼預設元素的個數能夠有效的提高
hashmap
的效能。
決定糞發塗牆
今天是國慶的第四天,晃晃悠悠又過去了。前天校慶,昨天上午被聖經mm忽悠聽sj去了。居然還有個天大化工的在那,而且貌似要皈依耶穌門了。這傢伙也要考研了,還挺強的,打算考中科院。政治已經看一遍了,mmd,我還動也沒動。今天上網看到乙個programmer的 感覺找到學習的目標了。都是20出頭的青年,人家...
動態規劃 顏料塗牆問題
有一面長度為n n 10000 的牆,如果要將每單位長度的牆塗上紅 綠 籃其中的一種顏色,而且紅色牆右邊不能緊鄰綠色的牆,綠色的牆右邊不能緊鄰藍色的牆,請問有幾種塗色的方法?0代表紅色,1代表綠色,2代表藍色 初始值f 1,0 f 1,1 f 1,2 1 狀態轉移方程 for n 1 f n,0 f...