ensureCapacity增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。

扩容原则:

若参数值大于底层数组长度的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

如果数据量比较小,就没啥差异了

原文地址:https://www.cnblogs.com/pangjing/p/10341539.html