List 遍历方式-研究_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > List 遍历方式-研究

List 遍历方式-研究

 2014/11/22 21:29:41  cuityang  程序员俱乐部  我要评论(0)
  • 摘要:今天看见网上有个List遍历方式讨论贴见http://pda158.iteye.com/blog/2158898第一种方式遍历每次会生成句柄所以比较慢,改进版代码如下:importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;publicclassListTest{publicstaticvoidmain(String[]args){List<String>list=newArrayList<
  • 标签:list 遍历 方式 研究
今天看见网上有个List 遍历方式讨论贴见 http://pda158.iteye.com/blog/2158898

第一种方式遍历每次会生成句柄 所以比较慢,改进版代码如下:

 

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

public class ListTest { 

public static void main(String[] args)  { 
List<String> list = new ArrayList<String>(); 
long t1,t2; 
for(int j = 0; j < 800000; j++)  { 
list.add("aaaaaa" + j); 

System.out.println("List first visit method:"); 

// t1=System.currentTimeMillis(); 
// for(String tmp:list)  { 
//// tmp;
// } 
// t2=System.currentTimeMillis(); 
// System.out.println("List first visit Run Time:" + (t2 -t1) + "(ms)"); 
//
// System.out.println("List second visit method:"); 
// t1=System.currentTimeMillis(); 
// for(int i = 0; i < list.size(); i++)  { 
// String tmp = list.get(i);
// } 
// t2=System.currentTimeMillis(); 
// System.out.println("List second visit Run Time:" + (t2 -t1) + "(ms)"); 
//
System.out.println("List Third visit method:"); 
Iterator<String> iter = list.iterator(); 
t1=System.currentTimeMillis(); 
while(iter.hasNext())  { 
String tmp =iter.next(); 

t2=System.currentTimeMillis(); 
System.out.println(" List Third visit Run Time:" + (t2 -t1) + "(ms)"); 
System.out.println("Finished!!!!!!!!"); 



结果:
List first visit Run Time:35(ms)
List second visit Run Time:21(ms)
List Third visit Run Time:35(ms)

1 同样第二种方式快,因为它直接从List中取出数据
2 1,3方式差不多

解释:
1,3 方式,所以时间是差不多的
Java 中的 foreach 语法是 iterator(迭代器)的变形用法
for (Iterator<Integer> i = list.iterator(); i.hasNext();) { 

1,2 方式比较

public E next() { 
        checkForComodification(); 
        try { 
            E next = get(cursor); 
            lastRet = cursor++; 
            return next; 
        } catch (IndexOutOfBoundsException e) { 
            checkForComodification(); 
            throw new NoSuchElementException(); 
        } 
    } 


    在迭代器的  next() 方法中也出现了下标访问方式没有的 checkForComodification() 方法和 lastRet 变量赋值操作。这也就是通过 foreach 方式遍历耗时的原因。



发表评论
用户名: 匿名