foreach可以遍历iterable接口
foreach循环在简洁性与预防bug方面有着传统的for循环无法比拟的优势.

除了一下情况:

过滤- 将删除特定元素remove方法
转换- 使用列表迭代器或者数组索引,以便设定元素的值
平行迭代- 如果并行遍历多个集合,就需要显示的控制迭代器和索引变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package book.effectiveJava;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* for-each循环优先于传统的for循环
* */
public class e_46PreferForeach {

public static void main(String[] args) throws Exception {

iteratorReplaceEle();

iteratorNextMethod();

}

private static void iteratorReplaceEle() {
List<String> ele =new ArrayList<>();
ele.add("1");
ele.add("2");
for(Iterator<String> iterator = ele.iterator();iterator.hasNext();){
String num = iterator.next();
if(num.equalsIgnoreCase("2")){
iterator.remove();
}
System.out.println(num);
}
System.out.println("iteratorReplaceEle "+ele.size());
}

private static void iteratorNextMethod() throws Exception {
List<String> list =new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");

Iterator<String> iterator =list.iterator();

System.out.println(iterator.next());
Thread.sleep(1000);
System.out.println(iterator.next());
Thread.sleep(1000);
System.out.println(iterator.next());

Thread.sleep(1000);
System.out.println(iterator.next());
}
}