ArrayList の初期化サイズは指定すべきか?
実験してみました。
- 環境
- JDK 1.5
- ソース
- ひたすら List#add するクラス
package lab.list; import java.util.List; public final class ListExtender { private static final String LIST_ELEMENT = "abcdefghijklmnopqrstuvwxyz0123456789"; public void extendList(List<String> list, int size) { for (int i = 0; i < size; i++) { list.add(LIST_ELEMENT); } } }
-
- ListExtender#extendList の実行時間を測定するクラス
package lab.list; import java.util.ArrayList; import java.util.List; public final class ListExtendTimer { private long startTime; public long run(int initialCapacity, int size) { List<String> list = new ArrayList<String>(initialCapacity); return timeListExtending(list, size); } public long run(int size) { List<String> list = new ArrayList<String>(); return timeListExtending(list, size); } private long timeListExtending(List<String> list, int size) { ListExtender creator = new ListExtender(); setStartTime(); creator.extendList(list, size); return System.currentTimeMillis() - getStartTime(); } private long getStartTime() { return startTime; } private void setStartTime() { this.startTime = System.currentTimeMillis(); } }
-
- Main クラス
package lab.list; public final class ListPerformanceTest { public static void main(String[] args) { execute( 10, 3000000); execute( 100, 3000000); execute( 1000, 3000000); execute( 10000, 3000000); execute( 100000, 3000000); execute(1000000, 3000000); execute(2000000, 3000000); execute(3000000, 3000000); execute(4000000, 3000000); execute(5000000, 3000000); execute(6000000, 3000000); } private static void execute(int init, int size) { ListExtendTimer timer = new ListExtendTimer(); System.out.printf("初期化サイズ: %d / 追加回数: %d\n", init, size); final int numOfRun = 10; long resultTotal = 0; for (int i = 0; i < numOfRun; i++) { long result = timer.run(init, size); resultTotal += result; printResult(result); } System.out.println("-----"); System.out.printf("平均: %d msec.\n\n", (resultTotal / numOfRun)); } private static void printResult(long executeTime) { System.out.printf("実行時間: %d msec.\n", executeTime); } }
- 実行結果
初期化サイズ: 10 / 追加回数: 3000000 実行時間: 344 msec. 実行時間: 156 msec. 実行時間: 219 msec. 実行時間: 219 msec. 実行時間: 250 msec. 実行時間: 203 msec. 実行時間: 187 msec. 実行時間: 203 msec. 実行時間: 204 msec. 実行時間: 265 msec.
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-