LoginSignup
9
7

More than 5 years have passed since last update.

ArrayListのclearメソッドとnewの速さ比較

Last updated at Posted at 2016-08-30

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)の場合」を追記。
9
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7