ArrayList容量初始化影响

在使用ArrayList时,尽可能初始化时给出容量大小,避免频繁的扩容

以下给出三种方式对比:

  • 不指定容量,使用自动扩容模式
1 ArrayList<Object> list = new ArrayList<Object>();
2     final int N = 10000000;
3     long startTime = System.currentTimeMillis();
4     for (int i = 0; i < N; i++) {
5       list.add(i);
6     }
7     long endTime = System.currentTimeMillis();
8     System.out.println("使用普通方法:" + (endTime - startTime));
  • 主动调用确定容量方法
1 final int N = 10000000;
2     ArrayList<Object> list = new ArrayList<Object>();
3     long startTime1 = System.currentTimeMillis();
4     list.ensureCapacity(N);
5     for (int i = 0; i < N; i++) {
6       list.add(i);
7     }
8     long endTime1 = System.currentTimeMillis();
9     System.out.println("使用ensureCapacity方法后:" + (endTime1 - startTime1));
  • 初始化直接给出容量大小
1 final int N = 10000000;
2     ArrayList<Object> list = new ArrayList<Object>(N);
3     long startTime1 = System.currentTimeMillis();
4     for (int i = 0; i < N; i++) {
5       list.add(i);
6     }
7     long endTime1 = System.currentTimeMillis();
8     System.out.println("使用初始化大小方法后:" + (endTime1 - startTime1));

执行结果如下:

第一次:
使用普通方法:2319
使用ensureCapacity方法后:358
使用初始化大小方法后:56

第二次:
使用普通方法:2187
使用ensureCapacity方法后:346
使用初始化大小方法后:72

第三次:
使用普通方法:2071
使用ensureCapacity方法后:337
使用初始化大小方法后:58

第四次:
使用普通方法:2114
使用ensureCapacity方法后:343
使用初始化大小方法后:60

总结:使用ArrayList最好直接给出初始化容量大小,其次主动调用 ensureCapacity() 方法,最后效率最差的使用默认方式自动扩容。

posted @ 2020-09-07 15:05  衰草寒烟  阅读(580)  评论(3编辑  收藏  举报