リストを巡る効率
1898 ワード
1.一般的にリストを巡回する方法
リストを巡る方法は3つあります.
a) for (Iterator iterator = ls.iterator(); iterator.hasNext();)
b) for (int i = 0; i < ls.size(); i++)
c) for (Object object : ls) (java5+)
一般的なList実装は2つあります.
a) java.util.ArrayList
b) java.util.LinkedList
効率はどうですか.
2.遍歴方法の小誤差検証
出力:
class java.util.ArrayList
iterator-nanotime :7199195
arraylike-nanotime:1920143
foreach-nanotime :3775320
class java.util.LinkedList
iterator-nanotime :5430188
arraylike-nanotime:9148595046
foreach-nanotime :1677620
方法:
3.無謀な結論
*ブラックボックスの場合:foreach>iterator>arraylike
* ArrayList :arraylike>foreach >iterator
* LinkedList:foreach >iterator >>>arraylike
4.根掘り葉掘り聞く
read the fk source code -_-
リストを巡る方法は3つあります.
a) for (Iterator iterator = ls.iterator(); iterator.hasNext();)
b) for (int i = 0; i < ls.size(); i++)
c) for (Object object : ls) (java5+)
一般的なList実装は2つあります.
a) java.util.ArrayList
b) java.util.LinkedList
効率はどうですか.
2.遍歴方法の小誤差検証
出力:
class java.util.ArrayList
iterator-nanotime :7199195
arraylike-nanotime:1920143
foreach-nanotime :3775320
class java.util.LinkedList
iterator-nanotime :5430188
arraylike-nanotime:9148595046
foreach-nanotime :1677620
方法:
private static void nanoLoop(List ls){
System.out.println(ls.getClass());
{ // iterator
long b = System.nanoTime();
for (Iterator iterator = ls.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
}
System.out.println("iterator-nanotime :"+(System.nanoTime()-b));
}
{ // array-like
long b = System.nanoTime();
for (int i = 0; i < ls.size(); i++) {
Object object = (Object) ls.get(i);
}
System.out.println("arraylike-nanotime:"+(System.nanoTime()-b));
}
{ // foreach
long b = System.nanoTime();
for (Object object : ls) {
Object s = (Object) object;
}
System.out.println("foreach-nanotime :"+(System.nanoTime()-b));
}
}
private static List initList(List ls,int count){
for (int i = 0; i < count; i++) {
ls.add("aaaa");
}
return ls;
}
public static void main(String[] args) {
nanoLoop(initList(new ArrayList(),10*10000));
nanoLoop(initList(new LinkedList(),10*10000));
}
3.無謀な結論
*ブラックボックスの場合:foreach>iterator>arraylike
* ArrayList :arraylike>foreach >iterator
* LinkedList:foreach >iterator >>>arraylike
4.根掘り葉掘り聞く
read the fk source code -_-