Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代器和while循环vs for循环vs for每个性能获取列表元素_Java_List_Loops - Fatal编程技术网

Java 迭代器和while循环vs for循环vs for每个性能获取列表元素

Java 迭代器和while循环vs for循环vs for每个性能获取列表元素,java,list,loops,Java,List,Loops,我是编程新手 我学习了三种获取列表元素的方法 我知道他们每个人在特定情况下都很好 但我想知道哪一个整体性能更好 public class Main { public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>(); for (int i = 0; i <= 15; i++) { arr

我是编程新手 我学习了三种获取列表元素的方法 我知道他们每个人在特定情况下都很好 但我想知道哪一个整体性能更好

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<>();

        for (int i = 0; i <= 15; i++) {
            arrayList.add(i + 666);
        }


        Iterator<Integer> iterator = arrayList.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next() + "Iterator");
        }

        System.out.println("==============");
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i) + " for ");
        }

        System.out.println("==============");
        for (int i : arrayList) {
            System.out.println(i + " for each");
        }
    }
}

谢谢

请不要比较它们。您不能一直使用所有样式

首先,样式1,而。。。和样式3各相同。样式3 for each使用样式1迭代器,而在内部使用

如果要在迭代时对列表执行操作,请使用迭代器样式。它支持这一点

对于简单,您不能修改样式2中的列表。如果您只想阅读列表,而不想做除此之外的任何事情,请使用样式2


毕竟,它使用索引从底层数组中获取元素。在传统的for循环中,您正在传递索引,如果使用迭代器,它会在内部不断增加自身索引。

请不要比较它们。您不能一直使用所有样式

首先,样式1,而。。。和样式3各相同。样式3 for each使用样式1迭代器,而在内部使用

如果要在迭代时对列表执行操作,请使用迭代器样式。它支持这一点

对于简单,您不能修改样式2中的列表。如果您只想阅读列表,而不想做除此之外的任何事情,请使用样式2


毕竟,它使用索引从底层数组中获取元素。在传统的for循环中,您要传递索引,如果是迭代器,它会在内部不断增加自身索引。

没有任何指定的循环来访问数组元素。在不同的条件下,不同的循环是有用的。大多数情况下,while循环用于访问列表的元素。但这同样取决于何时使用哪个循环……而且您已经对循环的差异有了更好的了解。

没有任何指定的循环来访问数组的元素。在不同的条件下,不同的循环是有用的。大多数情况下,while循环用于访问列表的元素。但这又取决于何时使用哪个循环……而且您已经对循环的不同有了更好的了解

for (int i: arrayList){
    System.out.println(i + " for each");
}

Iterator<Integer> iterator = arrayList.iterator();

while (iterator.hasNext()){
    System.out.println(iterator.next() + "Iterator");
}
它只是语法上的糖

这个

可能更好一点,但仅适用于ArrayList,但实际上不应该产生可测量的差异,因为迭代器没有做任何与此不同的事情。然而,对于其他没有O1 getint索引的列表实现,这是一个更糟糕的LinkedList

Iterator<Integer> iterator = arrayList.iterator();

while (iterator.hasNext()){
    System.out.println(iterator.next() + "Iterator");
}
它只是语法上的糖

这个


可能更好一点,但仅适用于ArrayList,但实际上不应该产生可测量的差异,因为迭代器没有做任何与此不同的事情。但是,对于其他没有O1 getint索引的列表实现,这是更糟糕的LinkedList。

不要考虑性能。在mirco管理层,你甚至不会注意到这一点。此外,迭代集合还需要一个迭代器。增强的for循环是一个语法糖,但它与迭代器的作用相同。唯一的区别是,在循环集合时,显式地需要一个迭代器来修改集合。看


最后,基于范围的循环是一种限制迭代次数的方法,而其他循环则迭代整个集合,除非在循环块中添加一些条件,否则不要考虑性能。在mirco管理层,你甚至不会注意到这一点。此外,迭代集合还需要一个迭代器。增强的for循环是一个语法糖,但它与迭代器的作用相同。唯一的区别是,在循环集合时,显式地需要一个迭代器来修改集合。看


最后,基于范围的循环是一种限制迭代次数的方法,而其他循环则迭代整个集合,除非在循环块中添加一些条件,如答案所示:不要为性能问题而烦恼。你很少需要考虑性能。这里是Java8的第四个示例:arrayList.forEachSystem.out::println或arrayList.forEachitem->System.out.printlnitm+Java8为什么不自己进行基准测试呢?在列表中填入100000个元素并测量时间,如答案所示:不要为性能问题而烦恼。你很少需要考虑性能。这里是Java8的第四个示例:arrayList.forEachSystem.out::println或arrayList.forEachitem->System.out.printlnitm+Java8为什么不自己进行基准测试呢?在列表中填入100000个元素并测量时间如果它不会影响性能,那么就没有什么好担心的,我会尝试使用一个我想要的。如果它不会影响性能,那么就没有什么好担心的,我会尝试使用一个不影响性能的 这顶帽子正合我的意。