リストの初期容量のテスト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倍速い。
- リストの初期容量を適切に設定すると、プログラムの実行速度が早くなる。