扩容原则:
若参数值大于底层数组长度的1.5倍,则数组的长度就扩容为这个参数值;若小于底层数组长度的1.5倍,则数组长度就扩容为底层数组长度的1.5倍。
ensureCapacity提高效率
final int N = 10000000; Object obj = new Object(); //没用调用ensureCapacity()方法初始化ArrayList对象 ArrayList list = new ArrayList(); long startTime = System.currentTimeMillis(); for(int i=0;i<=N;i++){ list.add(obj); } long endTime = System.currentTimeMillis(); System.out.println("没有调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms"); //调用ensureCapacity()方法初始化ArrayList对象 list = new ArrayList(); startTime = System.currentTimeMillis(); list.ensureCapacity(N);//预先设置list的大小 for(int i=0;i<=N;i++){ list.add(obj); } endTime = System.currentTimeMillis(); System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime) + "ms");
没有调用ensureCapacity()方法所用时间:531ms
调用ensureCapacity()方法所用时间:388ms
如果数据量比较小,就没啥差异了