ArrayListとLinkedListの比較
「LinkedListが有効な場合があまりないんだが、どんな場合がいいんだ。まともにベンチをとるとほとんどの場合で圧倒的にArrayListが速いんだが。」とつぶやいたところ、FIFOが速いという答えを頂いたので試してみました。
package sample; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; public class ListTest { private static final int count = 10000; public static void main(String[] args) { // ArrayListの測定 ArrayList<Integer> arrayList = new ArrayList<Integer>(); System.out.println("ArrayList FIFO"); start(); for (int i = 0; i < count; i++) { arrayList.add(i); } // 取り出し。 for (Iterator<Integer> iter = arrayList.iterator(); iter.hasNext();) { iter.next(); iter.remove(); } stop(); System.out.println("size: " + arrayList.size()); // LinkedListの測定 LinkedList<Integer> linkedList = new LinkedList<Integer>(); System.out.println("LinkedList FIFO"); start(); for (int i = 0; i < count; i++) { linkedList.add(i); } // 取り出し for (int i = 0; i < count; i++) { linkedList.poll(); } stop(); System.out.println("size: " + linkedList.size()); } private static long begin; private static void start() { begin = System.currentTimeMillis(); } private static void stop() { long end = System.currentTimeMillis(); System.out.println("間隔: " + (end - begin) + "ms"); } }
実行結果は以下です。
ArrayList FIFO 間隔: 72ms size: 0 LinkedList FIFO 間隔: 4ms size: 0
まあ、データ構造を考えればArrayListでのFOは相当きついです。こんな検証をしているのは、そもそも会社の人間がみんなLinkedListのみを当たり前のように使用しているわけであって。。。適切に使い分けろというのが難しいなら、もうArrayList以外使うなと言おうかとも思っていたりするので検証してました。