和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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)