【发布时间】:2016-06-12 16:10:26
【问题描述】:
根据我对ArrayList的理解,默认容量是10,当超过10时,它会创建一个具有新容量的新对象等等..
所以出于好奇,我输入了以下程序来检查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()与equals()相关联,这表明具有不同元素但容量相同的 2 个列表应返回不同的哈希码(如果您查看源代码,它们会返回)
标签: java arraylist collections hashcode