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