集合效能 -- 請為集合ArrayList指定初始容量
阿新 • • 發佈:2019-01-04
package com.sheting.basic.collection.capcity;
import java.util.ArrayList;
import java.util.List;
public class TestArrayList{
public static void main(String[] args) {
long begin1 = System.currentTimeMillis();
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
list1.add(new String(i + ""));
}
long end1 = System.currentTimeMillis();
System.out.println("list1 time:" + (end1 - begin1));
long begin2 = System.currentTimeMillis();
List<String> list2 = new ArrayList<>(1000000);
for (int i = 0; i < 1000000; i++) {
list2.add(new String(i + ""));
}
long end2 = System.currentTimeMillis();
System.out.println("list2 time:" + (end2 - begin2));
}
}
執行結果:
list1 time:246
list2 time:124
上面程式碼兩個list分別新增1000000個元素,list1沒有指定初始容量, 耗時幾乎是list2的一倍.
因此, 對於已知的情景,請為集合指定初始容量
ArrayList每次新增一個元素,就會檢測ArrayList的當前容量是否已經到達臨界點,如果到達臨界點則會擴容2倍。然而ArrayList的擴容以及陣列的拷貝生成新的陣列是相當耗資源的.