要素を削除したりする場合はArrayListよりLinkedListのほうが速い、ということは本で読んだので、実際どの程度違うのか、自分のマシンやってみた。
確かに、LinkedListはちょっぱやで、60~100倍くらい速かった。
ArrayListだけの方は実行する度処理時間が大きく変わった。
LinkedListの方は、ArrayListで生成したリストをaddAllしているんだけど、大したコストではない模様。
出力
after ArrayList iterator removal:list.size() = 0
処理時間:1146ミリ秒
after LinkedList iterator removal:list.size() = 0
処理時間:18ミリ秒
コード
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Test {
static int NUM = 100000;
static String STR = "123456";
public static void main(String[] args) {
Test test = new Test();
long a = System.currentTimeMillis();
test.arrayListOnlyIteration();
long b = System.currentTimeMillis();
//計測
System.out.println("処理時間:" + (b - a) + "ミリ秒");
test.arrayListAndLinkedListIteration();
//計測
System.out.println("処理時間:" + (System.currentTimeMillis() - b) + "ミリ秒");
}
private void arrayListAndLinkedListIteration() {
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
for (int i = 0; i < NUM; i++) {
list.add(STR);
}
LinkedList<String> ll = new LinkedList<String>();
ll.addAll(list);
Iterator<String> it = ll.iterator();
while (it.hasNext()) {
it.next();
it.remove();
}
list = new ArrayList<String>();
list.addAll(ll);
System.out.println("after LinkedList iterator removal:list.size() = " + list.size());
}
private void arrayListOnlyIteration() {
List<String> list = new ArrayList<String>();
for (int i = 0; i < NUM; i++) {
list.add(STR);
}
Iterator<String> it = list.iterator();
while (it.hasNext()) {
it.next();
it.remove();
}
System.out.println("after ArrayList iterator removal:list.size() = " + list.size());
}
}
以上になります。