株式会社イーブ|未経験・転職の方も就職可能。Javaプログラマー育成のエキスパート

HOMEJAVA技術者育成システム開発求人情報個人情報保護

第 39 回 ~ Listの操作にかかる時間 ~

トップページ > Java技術者育成 > Javaワンポイント > 第 39 回 ~ Listの操作にかかる時間 ~

今回のテーマは「Listの操作にかかる時間」です。


みなさんはListの要素を繰り返し追加、削除する際に、処理にかかる時間を意識したことがあるでしょうか。
実はListの先頭から操作した場合と末尾から操作した場合では、処理にかかる時間が大幅に違う場合があるのです。


一般に最もよく使われているArrayListを使って時間を計測してみましょう。
時間の計測には、Apache CommonsのStopWatchクラスを使用しています。



import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;


import org.apache.commons.lang.time.StopWatch;


public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        for (int i = 100000; i > 0; i--) {
            list.add(0, i);
        }
        stopWatch.stop();
        System.out.println("要素を先頭に追加した場合:" + stopWatch.getTime() + "ミリ秒");


        stopWatch.reset();
        stopWatch.start();
        for (ListIterator<Integer> iterator = list.listIterator(); iterator.hasNext();) {
            iterator.next();
            iterator.remove();
        }
        stopWatch.stop();
        System.out.println("要素を先頭から削除した場合:" + stopWatch.getTime() + "ミリ秒");


        stopWatch.reset();
        stopWatch.start();
        for (int i = 1; i <= 100000; i++) {
            list.add(i);
        }
        stopWatch.stop();
        System.out.println("要素を末尾に追加した場合:" + stopWatch.getTime() + "ミリ秒");


        stopWatch.reset();
        stopWatch.start();
        for (ListIterator<Integer> iterator = list.listIterator(list.size()); iterator.hasPrevious();) {
            iterator.previous();
            iterator.remove();
        }
        stopWatch.stop();
        System.out.println("要素を末尾から削除した場合:" + stopWatch.getTime() + "ミリ秒");
    }
}



処理にかかる時間が全然違うことがわかると思います。
なお、Listに変更が多い処理はLinkedListのほうが適していますし、計測結果も違ってきます。


[Javaワンポイント]内の前後の記事
第 40 回 ~ RandomAccessインターフェース ~
→ 第 39 回 ~ Listの操作にかかる時間 ~
第 38 回 ~ Listの範囲操作 ~


■更新日時での前後の記事
2月20日 お天気
→ 第 39 回 ~ Listの操作にかかる時間 ~
2月19日 お天気