import java.util.ArrayList;
import java.util.List;
/**
ArrayList源码分析:
JDK7下:
List list = new ArrayList();创建一个长度为10的Object[]数组,
若此次添加导致容量不够,调用grow()扩容,默认扩容为1.5倍(扩容时还要复制到新的数组),如果事先知道总共要放的个数,调用有参构造函数效率更高。
JDK8下:
List list = new ArrayList();
//private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//public ArrayList() {
// this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
//}
无参构造时,this.elementData首先指向空,并不分配内存。add时再分配。
List list = new ArrayList(3);
// 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);
}
}
有参构造时,直接分配内存。参数为0时,this.elementData指向private static final Object[] EMPTY_ELEMENTDATA = {};
后续添加与扩容与JDK7无异
Vector创建容量为10的数组,默认扩容为原来的2倍,区别于ArrayList的1.5倍。
*/
public class ArrayListTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
}
}