先看一下例子:
public static void testForAndIterator() {
int result;
List<Integer> a = new ArrayList<>();
LinkedList<Integer> b = new LinkedList<>();
for (int index = 0; index < 500000; index++) {
a.add(3);
b.add(2);
}
long start = System.currentTimeMillis();
for (int i = 0; i < a.size(); i++) {
result = a.get(i);
}
System.out.println("ArrayList普通循环使用:" + (System.currentTimeMillis() - start) + " ms");
start = System.currentTimeMillis();
for (int i : a) {
result = i;
}
System.out.println("ArrayList迭代器循环使用:" + (System.currentTimeMillis() - start) + " ms");
start = System.currentTimeMillis();
for (int i = 0; i < b.size(); i++) {
result = b.get(i);
}
System.out.println("LinkedList普通循环使用:" + (System.currentTimeMillis() - start) + " ms");
start = System.currentTimeMillis();
for (int i : b) {
result = i;
}
System.out.println("LinkedList迭代器循环使用:" + (System.currentTimeMillis() - start) + " ms");
}
结果:
ArrayList普通循环使用了4 ms
ArrayList迭代器循环使用了8 ms
LinkedList普通循环使用了103557 ms
LinkedList迭代器循环使用了7 ms
分析:
1.首先增强for循环和iterator循环遍历的效果是一样的,换句话说增强for循环(iterator)的内部也就是调用iterator实现的.(PS:增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等)
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。