foreach的使用
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for(int v : list)
System.out.println(v);
上面的代码将输出:
1
2
3
4
foreach是java对于for循环的一种增强,或者说增强的for循环。它能够作用于数组类型或者java.util.Iterator类型。也就是说数组类型和Collection集合大家族都可以使用增强的for循环。
foreach的原理
Iterator
对于Iterator类型来说,foreach循环的原理是利用目标的迭代器来进行迭代的。这其实也源于java的设计模式模式中的迭代器模式(提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示)。数组
对于数组则是对于数组的每个引用循环遍历。
foreach的时候引发fast-fail
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for(int v : list)
if (v % 2 == 0)
list.remove(v);
上面的代码将抛出异常:java.util.ConcurrentModificationException
跟用Iterator迭代一样,当迭代的时候如果要对目标进行remove等将会改变目标内容的操作,一定要使用Iterator中提供的方法。