获取列表元素的java迭代器和whileloop vs forloop vs foreach性能
我是编程新手 我学习了三种获取列表元素的方法 我知道他们每个人在特定情况下都很好 但我想知道哪一个在整体(性能)上更好
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 楼答案
请不要比较它们。你不能一直使用所有的样式
首先,样式1(
while (...)
)和样式3(for-each
)是相同的。样式3(for-each
)在内部使用样式1(iterator
和while
)如果要在迭代时对列表执行操作,请使用
iterator
样式。它支持这一点您不能修改样式2中的列表(简单^{)。如果你只想阅读列表,而不想做除此之外的任何事情,那么选择style 2
毕竟,它是使用索引从底层数组中获取元素。在传统的for循环中,您要传递
index
,如果是迭代器,它会在内部不断增加自身(index
)# 2 楼答案
没有任何指定的循环来访问数组的元素。在不同的条件下,不同的循环是有用的。大多数情况下,while循环用于访问列表中的元素。但这又取决于何时使用哪个循环。。。你已经对循环的不同有了更好的了解
# 3 楼答案
和
这只是语法上的糖
这个
可能更好一点,但仅适用于ArrayList,但实际上不应该产生可测量的差异,因为迭代器不会做任何不同于此的事情。然而,对于其他没有O(1)
get(int index)
的列表实现来说,这要糟糕得多(LinkedList)# 4 楼答案
不要考虑表演。在mirco管理层,你甚至不会注意到这一点。此外,在
Collection
上迭代需要Iterator
。增强的for循环是一种语法糖,但它与Iterator
相同。唯一的区别是,在循环过程中,显式地需要一个Iterator
来修改Collection
。见How to avoid "ConcurrentModificationException" while removing elements from `ArrayList` while iterating it?最后,基于范围的循环是一种限制迭代次数的方法,而其他循环则迭代整个集合(除了在循环块中添加一些条件)