リストの初期容量のテスト2015/12
テスト概要
- リストの初期容量による実行速度の違いを知りたい。
- デフォルトサイズ(初期容量10)と、初期容量百万の2つのArrayListを用意して。百万回Integerクラスをaddすることを2回繰り返し、それぞれの所要時間を計測する。
テスト環境
マシン : 東芝 dynabook R73/W6M
CPU : i7-4710MQ 2.50GHz
MEM : 8GB
OS : Windows 8.1 64bit
Java : 1.8.0.31
Eclipse : 4.4.1
実行プログラムコード
import java.util.ArrayList;
/**
* ArrayListの初期容量を変えてループを計測するプログラム。
*/
public class ListSpeed {
public static void main(String[] args) {
// アイドリング
for (int i = 0; i < 100; i++) {
System.out.println("Do Initialize..." + i);
}
ListSpeed obj = new ListSpeed();
long withDefault = 0L;
long withMilion = 0L;
// 百万回ずつループ
for (int i = 0; i < 100; i++) {
withDefault += obj.newWithDefault();
withMilion += obj.newWithMillion();
}
// 中休み
for (int i = 0; i < 100; i++) {
System.out.println("Now Breaking..." + i);
}
// 百万回ずつループ
for (int i = 0; i < 100; i++) {
withMilion += obj.newWithMillion(); withDefault += obj.newWithDefault();
}
// 結果を表示
System.out.println("withDefault : " + withDefault);
System.out.println("withMilion : " + withMilion);
}
ListSpeed() {}
long newWithDefault() {
long then = System.currentTimeMillis();
// 初期値10でリストを初期化
ArrayList list = new ArrayList();
// 百万回ループ
for (int i = 0; i < 1000000; i++) {
list.add(i);
}
long now = System.currentTimeMillis();
return now - then;
}
long newWithMillion() {
long then = System.currentTimeMillis();
// 初期値百万でリストを初期化
ArrayList list = new ArrayList(1000000);
// 百万回ループ
for (int i = 0; i < 1000000; i++) {
list.add(i);
}
long now = System.currentTimeMillis();
return now - then;
}
}
| 初期容量10(デフォルト) | 初期容量1,000,000 | |
|---|---|---|
| 1回目 | 1771 | 1136 |
| 2回目 | 1732 | 1300 |
| 3回目 | 1819 | 1009 |
| 4回目 | 1924 | 1138 |
| 5回目 | 1738 | 1133 |
| 6回目 | 1793 | 1036 |
| 7回目 | 1738 | 1158 |
| 8回目 | 1765 | 1250 |
| 9回目 | 1737 | 1138 |
| 10回目 | 1691 | 1294 |
| 平均 | 1770.8 | 1159.2 |
結論
- デフォルトサイズ(初期容量10)のときよりも、初期容量百万の方が、約1.5倍速い。
- リストの初期容量を適切に設定すると、プログラムの実行速度が早くなる。