具体看代码
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
// 方式一:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 方式二:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// 方式三:
for (String item : list) {
System.out.println(item);
}
// 方式四(Java 8):
list.forEach(new Consumer() {
@Override
public void accept(String item) {
System.out.println(item);
}
});
// 方式五(Java 8 Lambda):
list.forEach(item -> {
System.out.println(item);
});
方式一的遍历方法对于RandomAccess接口的实现类(例如ArrayList)来说是一种性能很好的遍历方式。但是对于LinkedList这样的基于链表实现的List,通过list.get(i)获取元素的性能差。
方式二和方式三两种方式的本质是一样的,都是通过Iterator迭代器来实现的遍历,方式三是增强版的for循环,可以看作是方式二的简化形式。
方式四和方式五本质也是一样的,都是使用Java 8新增的forEach方法来遍历。方式五是方式四的一种简化形式,使用了Lambda表达式。