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
接近 2 年之前 回复
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:你有进行过测试吗?)
接近 2 年之前 回复
shendixiong
shendixiong   2016.09.19 11:36

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java 遍历arrayList的四种方法及其效率对比
java 遍历arrayList的四种方法 package com.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo {     public static void main(Str
ArrayList去重复以及遍历
方式1 import java.util.ArrayList; /** * ArrayList 是list的子类 所以:数据有序,可重复 需求:请在ArrayList里面存储多个字符串 ,并想办法去掉重复的元素 * * @author ycf * */ public class ArrayListTest { public static void main(String[] ar
ArrayList三种遍历方式比较
方法一:普通for循环遍历//仅做代码的格式说明,不涉及具体问题 for(int i = 0 ; i < list.size() ; i++){  system.out.println(list.get(i));  }方法二:增强for循环遍历增强for循环的底层也是Iterator实现的,只是对它包装了一下。for(String string:list){  system.out.pr
java ArrayList与LinkedList的普通for循环遍历
对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] args) { List arrayList = new ArrayList(); for (int i = 0; i ) { arrayL
Java中常用的集合类、ArrayList 、HashMap及其遍历方法
1 Java中常用的集合类 2
ArrayList遍历及效率比较
ArrayList遍历方法及效率比较
LinkedList或ArrayList泛型类遍历链表
package shiyan4; import java.util.Iterator; import java.util.LinkedList; public class lianxi3 {        public static void main(String args[]){        LinkedListmylist=new LinkedList();  
ArrayList列表不同遍历方式性能比较
假设现在我们要求一个 List 实例的平均值,我们可以通过如下两种方法进行计算(这里假设我们传入的是ArrayList 对象):         1. 通过 foreach 方式遍历列表计算平均值 public static int average(List list) { int sum = 0; // 遍历求和 for (int i : list) {
ArrayList和LinkedList的几种循环遍历方式及性能对比分
转自:http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论。 通过本文你可以了解 (1)List的五种遍历方式及各
java list详解及arrayList的四种遍历方法
1.List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。   List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为   ArrayList或LinkedList,例如:List l = new ArrayList