1. 常用遍历 List 之方法
遍历 List 方法有三:
a) for (Iterator iterator = ls.iterator(); iterator.hasNext();)
b) for (int i = 0; i < ls.size(); i++)
c) for (Object object : ls) (java5+)
常用 List 实现有二:
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
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 -_-