zoukankan      html  css  js  c++  java
  • Java中List集合的遍历

    一、对List的遍历有三种方式   
        

       List<String>    list    =    new    ArrayList<String>();   
       list.add("testone");   
       list.add(“testtwo”);   
       ...   


        
       第一种:   

       for(Iterator<String>    it    =    list.iterator();    it.hasNext();    )    {   
           ....   
       }   
    

      


       这种方式在循环执行过程中会进行数据锁定,    性能稍差,    同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法,    不能使用list.remove方法,    否则一定出现并发访问的错误.   
        
       第二种:   

       for(String   data    :    list)    {   
           .....   
       }   
    

      


       内部调用第一种,    换汤不换药,  因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。
        
       第三种:   

       for(int    i=0;    i<list.size();    i++)    {   
           A    a    =    list.get(i);   
           ...   
       }   
    

      


       内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题。

    二、测试实例

    package com.inspur.Test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    /**
     *@author WHD
     *2015-3-5
     */
    @SuppressWarnings("unused")
    public class MapTest {
        private static List<String> list= new ArrayList<String>();
        public static void main(String[]args){
            MapTest  mapTest = new  MapTest();
            mapTest.initList(list);
            mapTest.foreach(list);
            mapTest.forlist(list);
            mapTest.iteratorList(list);
        }
        
        //list 集合中添加10万条数据
        public List initList(List<String> list){
            int i=0;
            int num=6000000;
            for(i=0;i<num;i++){
                list.add("list"+i);
            }
            return list;
        }
        //list 集合遍历 foreach
        
        public void  foreach(List<String> list){
            long start= System.currentTimeMillis();
            for(String data:list){
                String value=data;
            }
            
            long end=System.currentTimeMillis();
            long count=end-start;
            System.out.println("foreach 循环时间"+count);
        }
        // list集合遍历  for
        public void forlist(List<String> list){
            long start=System.currentTimeMillis();
            int i=0;
            for( i=0;i<list.size();i++){
                String value=list.get(i);
            }
            long end=System.currentTimeMillis();
            long count=end-start;
            System.out.println("for list.size() 遍历时间"+count);
        }
        
        // Iterator 遍历循环
        public void iteratorList(List<String> list){
            long start= System.currentTimeMillis();
            for(Iterator<String>  it=list.iterator();it.hasNext();){
                String value=it.next();
            }
            long end=System.currentTimeMillis();
            long count=end-start;
            System.out.println("iterator 遍历时间"+count);
        }
    
    }
    

      



  • 相关阅读:
    迭代器概念与traits编程技法
    C++模板的特化与偏特化
    c++ operator关键字
    cookie-小总结吧
    ping
    git
    setTimeout()基础/setInterval()基础
    SASS
    命令行编译sass
    sublime添加sass编译
  • 原文地址:https://www.cnblogs.com/itzyz/p/10844951.html
Copyright © 2011-2022 走看看