首页 > 技术文章 > 泛型数组列表与反射

runwulingsheng 2016-01-06 16:31 原文

如果声明一个没有指定空间长度的泛型数组,如ArrayList<Integer> in = new
ArrayList<>(),这时,系统会自动给in分配10个容量空间,即[null,null,null,null,null,null,null,null,null,null],如果这时为in赋值,如:

for(int i=1;i<=5;i++){    
  in.add(i);
}

这时,in的内容实际上为[1,2,3,4,5,null,null,null,null,null],即有五个为null的值,但是用in.size()方法得到5,不包括后面的null,在实现反射的toString()方法时,可能会打印出后面的null值,如:

java.util.ArrayList[elementData=class java.lang.Object[]{java.lang.Integer[value=1][][],java.lang.Integer[value=4][][],
java.lang.Integer[value=9][][],java.lang.Integer[value=16][][],java.lang.Integer[value=25][][],null,null,null,null,null},
size=5][modCount=5][][]
即便一开始指定ArrayList的大小,如ArrayList<Integer> in = new ArrayList<>(4),当动态增加数组元素到一定量值时,ArrayList本身的大小会曾动态增长,增长值为4->7->11->17...,并不是逐个增加容量大小,而是遵循((旧容量 * 3) / 2) + 1的规则.
另外,数组在java中是一个对象,这意味着它可以这样被引用:
priavate int[] a = new int[10]; 
public static Object XXX(Object a){   
    ...
}

 

推荐阅读