ArrayList测试大小和容量
测试容量的方法
public static Integer getCapacity(ArrayList list) {
Integer length = null;
Class c = list.getClass();
Field f;
try {
f = c.getDeclaredField("elementData");
f.setAccessible(true);
Object[] o = (Object[]) f.get(list);
length = o.length;
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return length;
}
测试:
ArrayList<Integer> a =new ArrayList<>();
System.out.println("空数组大小和容量分别是"+a.size()+" "+getCapacity(a));
a.add(1);
System.out.println("空数组添加1个数据后,大小和容量分别是"+a.size()+" "+getCapacity(a));
a.add(2);
System.out.println("空数组添加2个数据后,大小和容量分别是"+a.size()+" "+getCapacity(a));
for (int i = 1; i <= 8; i++) {
a.add( i);
}
System.out.println("空数组添加到了10个数据后,大小和容量分别是"+a.size()+" "+getCapacity(a));
a.add(2);
System.out.println("空数组添加11个数据后,大小和容量分别是"+a.size()+" "+getCapacity(a));
结果:
空数组大小和容量分别是0 0
空数组添加1个数据后,大小和容量分别是1 10
空数组添加2个数据后,大小和容量分别是2 10
空数组添加到了10个数据后,大小和容量分别是10 10
空数组添加11个数据后,大小和容量分别是11 15
总结:ArrayList默认容量是10,即使里面为空,容量也是10
而且是插入前扩容,比如要插第11个数据,那么它会先扩容到1.5倍大小,即15
HashMap测试容量大小和扩容机制
这里有非常好的地址,请点击传送门