Java 对于LinkedList中的每个或迭代器,哪个性能更好?

Java 对于LinkedList中的每个或迭代器,哪个性能更好?,java,collections,foreach,linked-list,iterator,Java,Collections,Foreach,Linked List,Iterator,我一直在检查与迭代器在通过程序遍历LinkedList时的性能: public class ListTraversePerformance { public static void main(String... args){ List<String> list = new LinkedList<String>(); for(int i=0;i<100000;i++){ list.add("Any Str

我一直在检查迭代器在通过程序遍历LinkedList时的性能:

public class ListTraversePerformance {
    public static void main(String... args){
        List<String> list = new LinkedList<String>();
        for(int i=0;i<100000;i++){
            list.add("Any String" + i);
        }
        Iterator i = list.iterator();
        String x;
        long t1 = System.currentTimeMillis();
        for(String j: list){
             x = j;

        }
        long t2 = System.currentTimeMillis();
        while(i.hasNext()){ 
            x= (String)i.next();

        }
        long t3 = System.currentTimeMillis();
        System.out.print((t2-t1) + "  " + (t3-t2));
    }
}
公共类ListTraversePerformance{
公共静态void main(字符串…参数){
列表=新建LinkedList();

对于(inti=0;i这两个元素几乎是等价的,它们都是O(n),因为每个元素只迭代一次。两个元素都不重复迭代

for-each循环在引擎盖下使用了一个迭代器。它是对实现的对象进行迭代的语法糖,反过来又创建了一个迭代器。因此,当我说这两者几乎是等价的时,我的意思是字面上的

微观基准测试很难做到正确。最大的问题是,我们最终认为我们在为一件事计时,但实际上我们在为另一件事计时;要想了解到底发生了什么,需要进行大量的挖掘。阅读以下相关帖子的答案,它将解释为什么会出现这种情况mes在如何处理这一点上有很大的不同。这个问题的答案与您对基准测试的看法基本相同,只是使用浮点运算,而不是列表迭代


快速总结如下:1)JVM通过解释器开始执行代码,并动态优化代码的热点区域;2)GC和其他后台进程可能会产生干扰,一些进程可能在JVM内,另一些进程可能在JVM外。

这两个进程几乎相当,它们都是O(n)因为每个元素只迭代一次。两个元素都不会重复迭代

for-each循环在引擎盖下使用了一个迭代器。它是对实现的对象进行迭代的语法糖,反过来又创建了一个迭代器。因此,当我说这两者几乎是等价的时,我的意思是字面上的

微观基准测试很难做到正确。最大的问题是,我们最终认为我们在为一件事计时,但实际上我们在为另一件事计时;要想了解到底发生了什么,需要进行大量的挖掘。阅读以下相关帖子的答案,它将解释为什么会出现这种情况mes在如何处理这一点上有很大的不同。这个问题的答案与您对基准测试的看法基本相同,只是使用浮点运算,而不是列表迭代


快速总结如下:1)JVM通过解释器开始执行代码,并动态优化代码的热点区域;2)GC和其他后台进程可能会产生干扰,一些进程可能在JVM内,另一些进程可能在JVM外。

这两个进程几乎相当,它们都是O(n)因为每个元素只迭代一次。两个元素都不会重复迭代

for-each循环在引擎盖下使用了一个迭代器。它是对实现的对象进行迭代的语法糖,反过来又创建了一个迭代器。因此,当我说这两者几乎是等价的时,我的意思是字面上的

微观基准测试很难做到正确。最大的问题是,我们最终认为我们在为一件事计时,但实际上我们在为另一件事计时;要想了解到底发生了什么,需要进行大量的挖掘。阅读以下相关帖子的答案,它将解释为什么会出现这种情况mes在如何处理这一点上有很大的不同。这个问题的答案与您对基准测试的看法基本相同,只是使用浮点运算,而不是列表迭代


快速总结如下:1)JVM通过解释器开始执行代码,并动态优化代码的热点区域;2)GC和其他后台进程可能会产生干扰,一些进程可能在JVM内,另一些进程可能在JVM外。

这两个进程几乎相当,它们都是O(n)因为每个元素只迭代一次。两个元素都不会重复迭代

for-each循环在引擎盖下使用了一个迭代器。它是对实现的对象进行迭代的语法糖,反过来又创建了一个迭代器。因此,当我说这两者几乎是等价的时,我的意思是字面上的

微观基准测试很难做到正确。最大的问题是,我们最终认为我们在为一件事计时,但实际上我们在为另一件事计时;要想了解到底发生了什么,需要进行大量的挖掘。阅读以下相关帖子的答案,它将解释为什么会出现这种情况mes在如何处理这一点上有很大的不同。这个问题的答案与您对基准测试的看法基本相同,只是使用浮点运算,而不是列表迭代



快速总结如下:1)JVM通过解释器开始执行代码,并动态优化代码的热点区域;2)GC和其他后台进程可能会产生干扰,一些进程可能在JVM内,另一些进程可能在JVM外。

LinkedList始终从开始节点到结束进行遍历。不,您不正确。foreach循环不需要d每次从一开始就迭代。@JunedAhsan我有一个想法,,,我的问题是为什么for-each循环运行缓慢。@sagar不同的执行将根据当前的cpu状态为同一段代码提供不同的执行时间。简言之,两种情况之间没有linkedlist的时间复杂度差异始终从开始到结束进行遍历。k,,我知道了,谢谢。@JunedAhsanLinkedList始终从开始节点到结束进行遍历。不,你说得不对。foreach循环不需要每次都从头开始迭代。@JunedAhsan我有一个想法,,,我的问题是为什么for each循环运行缓慢。@sagar