List遍历效率

来源:互联网 发布:sql表格联合主键 编辑:程序博客网 时间:2024/05/22 12:05

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
 

方法

 

Java代码  收藏代码
  1. private static void nanoLoop(List ls){  
  2.     System.out.println(ls.getClass());  
  3.     { // iterator  
  4.         long b = System.nanoTime();  
  5.         for (Iterator iterator = ls.iterator(); iterator.hasNext();) {  
  6.             Object object = (Object) iterator.next();  
  7.         }  
  8.         System.out.println("iterator-nanotime :"+(System.nanoTime()-b));  
  9.     }  
  10.       
  11.     { // array-like  
  12.         long b = System.nanoTime();  
  13.         for (int i = 0; i < ls.size(); i++) {  
  14.             Object object = (Object) ls.get(i);  
  15.         }  
  16.         System.out.println("arraylike-nanotime:"+(System.nanoTime()-b));  
  17.     }  
  18.       
  19.     { // foreach  
  20.         long b = System.nanoTime();  
  21.         for (Object object : ls) {  
  22.             Object s = (Object) object;  
  23.         }  
  24.         System.out.println("foreach-nanotime  :"+(System.nanoTime()-b));  
  25.     }  
  26. }  
  27.   
  28. private static List initList(List ls,int count){  
  29.     for (int i = 0; i < count; i++) {  
  30.         ls.add("aaaa");  
  31.     }  
  32.     return ls;  
  33. }  
  34.   
  35. public static void main(String[] args) {  
  36.     nanoLoop(initList(new ArrayList(),10*10000));  
  37.     nanoLoop(initList(new LinkedList(),10*10000));  
  38. }  
 

 

3. 鲁莽结论

 

 * 黑盒情况下:foreach > iterator > arraylike

 * ArrayList :arraylike>foreach >iterator

 * LinkedList:foreach >iterator >>>arraylike


参考:http://trydofor.iteye.com/blog/800247