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() 方法,最后效率最差的使用默認方式自動擴容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM