美文网首页
6,java list 遍历的三中方法

6,java list 遍历的三中方法

作者: 滔滔逐浪 | 来源:发表于2019-01-09 19:05 被阅读2次

    1. Iterator遍历list集合

    List list=new ArrayList();
    list.add("java1");
    list.add("java2");
    list.add("java3");
    for(Iteratorit    =    list.iterator();    it.hasNext();    )    
    {
        ....   
    }   
    

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

    1. for循环遍历
    List list=new ArrayList();
    list.add("java1");
    list.add("java2");
    list.add("java3");
    for(String   data    :    list)    
    {
        ....   
    } 
    

    比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。

    1. for循环另外一种方法遍历
    List list=new ArrayList();
    list.add("java1");
    list.add("java2");
    list.add("java3");
    for(int    i=0;    i<list.size(); i++)
    {
        ....   
    } 
    

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

    3种list遍历方法性能测试

    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
    从测试的结果我们可以明显的看到第3种效率最高!
    

    相关文章

      网友评论

          本文标题:6,java list 遍历的三中方法

          本文链接:https://www.haomeiwen.com/subject/duogrqtx.html