list集合初始化的时候,若大小可知,应初始化固定大小的集合,也是个好习惯。
避免在add()元素的时候,要扩容,然后就得重新copy一遍元素,这样就不好啦。
ArrayList集合大概原理:就是一个Object数组,来存储值,然后知道这点之后,继续看下面的。
下面关于guava的Lists.newArrayListWithCapacity()初始化带大小的list集合的大概源码概览如下:
List<Person> persons = Lists.newArrayListWithCapacity(4);
@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayListWithCapacity(int initialArraySize) {
checkNonnegative(initialArraySize, "initialArraySize"); // for GWT.
return new ArrayList<E>(initialArraySize);
}
static int checkNonnegative(int value, String name) {
if (value < 0) {
throw new IllegalArgumentException(name + " cannot be negative but was: " + value);
}
return value;
}
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
/**
* Shared empty array instance used for empty instances.
*/
private static final Object[] EMPTY_ELEMENTDATA = {};