2 myc csdn Myc_CSDN 于 2016.09.18 15:42 提问

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个回答

Ro_bot
Ro_bot   2016.09.18 17:21
已采纳

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

Myc_CSDN
Myc_CSDN soga.thanks
大约一年之前 回复
qq_29594393
qq_29594393   Ds   Rxr 2016.09.18 16:07

第一种方法时间最长的原因是由于每次循环都会执行一次list.size()方法
改进 int len=list.size()

for(int i=0;i<len;i++)时间就会和下面的方法持平

Myc_CSDN
Myc_CSDN 你没理解我的意思。如果把forEach遍历放在第一个进行遍历,那么forEach的时间就会变得最长。(ps:你有进行过测试吗?)
大约一年之前 回复
shendixiong
shendixiong   2016.09.19 11:36

对于这种没有礼貌的人,见一次喷一次!别人最起码有回答你的问题,不管对或者错!最起码的尊重应该有吧

Csdn user default icon
上传中...
上传图片
插入图片