和Java狼狈为奸 2016-09-18 07:42 采纳率: 50%
浏览 1134
已采纳

java ArrayList 遍历比较

通过三种不同的方式遍历ArrayList,测试的结果时间相差比较大,三种遍历方式不管怎么调整顺序,第一种遍历的方式总是时间会多出很多,不知道为什么,求大神指点。

 public static void compare() {
        List<String> list = new ArrayList<String>();
        Set<String> set = new HashSet<String>();
        for(int i=0;i<100000;i++) {
            list.add("a"+i);
        }
        long t1=0L,t2=0L;

        ////two
        t1 = System.currentTimeMillis();
        for(int i=0; i<list.size(); i++) {
            set.add(list.get(i));
        }
        t2 = System.currentTimeMillis();
        System.out.println("size遍历的时间为:"+(t2-t1)+"mm");
        ////three
        t1 = System.currentTimeMillis();
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()) {
            set.add((String)iterator.next());
        }
        t2 = System.currentTimeMillis();
        System.out.println("iterator遍历的时间为:"+(t2-t1)+"mm");
        ////one
        t1 = System.currentTimeMillis();
        for(String s : list) {
            set.add(s);
        }
        t2 = System.currentTimeMillis();
        System.out.println("forEach遍历的时间为:"+(t2-t1)+"mm");
    }

这是测试的时间:
size遍历的时间为:112mm
iterator遍历的时间为:20mm
forEach遍历的时间为:18mm

  • 写回答

3条回答

  • 「已注销」 2016-09-18 09:21
    关注

    无论第一种是one/two/three哪种,set都要判断保存list里的元素,而其它两种,只需判断set里面有没有这元素即可。
    所以第一种的时间总是比其它两种的时间长。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用