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

    一、对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
    从测试的结果我们可以明显的看到效率了!
  • 相关阅读:
    装机软件
    关于软件开发
    Jquery中ajax基本语法
    jQuery+Ajax+PHP滚动加载
    ajax无刷新分页
    PHPExcel数据导出到Excel文件
    Linux下启动,停止,重启Nginx、Mysql、PHP
    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
    linux系统给普通用户添加sudo权限
    Linux下全局安装composer方法
  • 原文地址:https://www.cnblogs.com/cooking/p/4914480.html
Copyright © 2011-2022 走看看