迭代器和 while-loop vs for 循环与 for-each 性能,用于获取列表的元素



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

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");
        }
    }
}

谢谢

不要考虑表演。它非常处于微观管理水平,您甚至不会注意到它。除此之外,还需要一个Iterator来迭代Collection。增强的 for 循环是一种语法糖,但它的作用与 Iterator 相同。唯一的区别是,您明确需要一个Iterator来修改Collection,同时循环访问它。请参阅如何在迭代时从"ArrayList"中删除元素时避免"ConcurrentModificationException"?

最后,基于范围的循环是一种限制迭代次数的方法,而其他循环则迭代整个集合(除了您在循环块中添加一些条件(

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

首先,样式 1 (while (...)( 和样式 3 (for-each ( 是相同的。样式3(for-each(在内部使用样式1(iteratorwhile(。

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

您无法修改样式 2 中的列表(简单for(。如果您只想阅读列表并且不想做除它之外的任何操作,请使用样式 2。

毕竟,它是使用索引从底层数组中获取元素的。在传统的 for 循环中,你传递的是index,在迭代器的情况下,它会在内部不断递增(index(。

没有任何

指定的循环来访问数组的元素。 在不同的条件下,不同的循环是有用的。 大多数情况下,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");
}

它只是句法糖。

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

可能好一点,但仅适用于 ArrayList,但实际上不应该产生可衡量的差异,因为迭代器不会做与此不同的任何操作。然而,对于其他没有O(1(get(int index)的列表实现,情况要糟糕得多(LinkedList(。

最新更新