ArrayListが格納された変数を使いまわす手段として、以下の2つの方法を比較しました。
- clear()メソッドを使う。
- newでインスタンスを生成する。
実行環境は以下の通りです。
- DELL VOSTRO 1540
- Windows 10 Pro 32bit
- Intel Celelron 2.00 GHZ
- メモリ 2.0GB
- HDは約300GB
以下の2つのプログラムを使い、速さを比較しました。「ArrayListに0から30000未満まで格納し、clear/newを実行する」というのを30000回繰り返してます。
ArrayListClear
public class ArrayListClear {
public static void main(String[] args) {
long start, end;
List<Integer> list = new ArrayList<>();
start = System.currentTimeMillis();
for (int i = 0; i < 30000; i++) {
for (int j = 0; j < 30000; j++) {
list.add(j);
}
list.clear();
}
end = System.currentTimeMillis();
System.out.println(end -start);
}
}
ArrayListNew
package test;
import java.util.ArrayList;
import java.util.List;
public class ArrayListNew {
public static void main(String[] args) {
long start, end;
List<Integer> list = new ArrayList<>();
start = System.currentTimeMillis();
for (int i = 0; i < 30000; i++) {
for (int j = 0; j < 30000; j++) {
list.add(j);
}
list = new ArrayList<>();
}
end = System.currentTimeMillis();
System.out.println(end -start);
}
}
結果は以下の通りです。
クラス名 | clear() | new ArrayList<>() |
---|---|---|
ミリ秒 | 22982 | 29450 |
clear()メソッドを使った方が速いという結果になりました。
コンストラクタArrayList(int initialCapacity)の場合
saka1029さんに初期容量についてコメントを頂きました。コンストラクタArrayList(int initialCapacity)を使った場合を載せます。
以下の2つのプログラムで比較しました。
ArrayListClear30000
package test;
import java.util.ArrayList;
import java.util.List;
public class ArrayListClear30000 {
public static void main(String[] args) {
long start, end;
List<Integer> list = new ArrayList<>(30000);
start = System.currentTimeMillis();
for (int i = 0; i < 30000; i++) {
for (int j = 0; j < 30000; j++) {
list.add(j);
}
list.clear();
}
end = System.currentTimeMillis();
System.out.println(end -start);
}
}
ArrayListClear30000
package test;
import java.util.ArrayList;
import java.util.List;
public class ArrayListNew30000 {
public static void main(String[] args) {
long start, end;
List<Integer> list = new ArrayList<>(30000);
start = System.currentTimeMillis();
for (int i = 0; i < 30000; i++) {
for (int j = 0; j < 30000; j++) {
list.add(j);
}
list = new ArrayList<>(30000);
}
end = System.currentTimeMillis();
System.out.println(end -start);
}
}
クラス名 | clear() | new ArrayList(int initialCapacity) |
---|---|---|
ミリ秒 | 22599 | 21335 |
new ArrayList(int initialCapacity)の方が速いという結果になりました。
修正履歴
20160830
- 「コンストラクタArrayList(int initialCapacity)の場合」を追記。