按我的理解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