按我的理解ArrayList
,默認容量爲10,當它增長超過10,這將創造新的能力等新的對象..爲什麼每次添加新元素時,ArrayList的hashCode()都會發生變化?
所以出於好奇,我輸入下面的程序來檢查hashcode()
爲ArrayList
對象:
public class TestCoreJava {
public static void main(String [] args){
ArrayList al = new ArrayList();
for(int i=0;i<15;i++){
al.add("Temp"+i);
System.out.println("Hashcode for "+i+" element "+al.hashCode());
}
}
}
根據上述情況,當我不ArrayList
設置初始容量默認是10 因此而增加11要素,它會創建一個新的對象,並增加容量ArrayList
。
當我打印ArrayList
對象的哈希碼時,它每次都給出一個新的hashcode()
。
以下是O/P:
Hashcode for 0 element 80692955
Hashcode for 1 element -1712792766
Hashcode for 2 element -1476275268
Hashcode for 3 element 1560799875
Hashcode for 4 element 1220848797
Hashcode for 5 element -727700028
Hashcode for 6 element -1003171458
Hashcode for 7 element -952851195
Hashcode for 8 element 607076959
Hashcode for 9 element 1720209478
Hashcode for 10 element -6600307
Hashcode for 11 element -1998096089
Hashcode for 12 element 690044110
Hashcode for 13 element -1876955640
Hashcode for 14 element 150430735
據默認容量的概念,直到10元,因爲沒有新的對象需要,直到這一點要創建它應該印有相同hashcode()
,但它是不是這樣。
'的hashCode()'綁定到'這表明,(如果你看看源代碼,他們這樣做)2列出了不同的元素,但相同的容量應該返回不同的散列碼的equals()' – Thomas
的可能的複製[在Java中重寫equals和hashCode時應考慮哪些問題?](http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in- java) – Raedwald