• 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);
        }

    }


    三、测试结果:
    (1)、第一次
    foreach  遍历时间:55
    for list.size()遍历时间:47
    iterator 遍历时间:51
    (2)、第二次
    foreach  遍历时间:54
    for list.size()遍历时间:44
    iterator 遍历时间:50
    (3)、第三次
    foreach  遍历时间:48
    for list.size()遍历时间:43
    iterator 遍历时间:44
    从测试的结果我们可以明显的看到效率了!

  • 相关阅读:
    World Wind Java开发之三 显示状态栏信息
    hdu 5105 Math Problem(数学)
    内存寻址一(分段)
    Fedora20上Xen的安装与部署
    北京电子地图 谷歌-百度-高清-搜狗电子地图 地图14、17、19级图片
    win8.1休眠状态下不能进入系统
    IIC读写AT24C02代码2——串口命令控制多页读写
    ColorSchemer Studio 2 破解
    基于特定领域国土GIS应用框架设计及应用
    POJ 3614 Sunscreen 优先队列 贪心
  • 原文地址:https://www.cnblogs.com/houji/p/5182988.html
Copyright © 2020-2023  润新知