foreach格式循环
foreach 语句是数组遍历、集合迭代器遍历的语法简化,但是 foreach 语句并不能完全取代 for 语句(如果要是引用数组或者集合的索引,foreach就没法做到了)。
foreach 并不是一个关键字,习惯上将这种特殊的 for 语句格式称之为foreach
语句。
数组的循环
之前我们学过数组 a 的循环:
int[] a = {1, 2, 3, 4, 5};
for (int i = 0; i < a.length; i++) {
System.out.println("" + a[i]);
}
我们改用 foreach 循环
int[] a = {1, 2, 3, 4, 5};
for (int s : a) {
System.out.println("" + s);
}
集合的循环
我们之前学过 List 的集合,可以使用普通的 for 循环,但是效率低,我们这里使用 迭代器遍历。
LinkedList<String> list = new LinkedList<>();
list.add("aa");
list.add("bb");
list.add("cc");
for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
我们改用 foreach 循环
LinkedList<String> list = new LinkedList<>();
list.add("aa");
list.add("bb");
list.add("cc");
for (String s : list) {
System.out.println(s);
}
Map的循环
Map<String, String> map = new HashMap<String, String>();
map.put("0", "毫米");
map.put("1", "厘米");
map.put("2", "分米");
map.put("3", "米");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key=" + entry.getKey() + ",value=" + entry.getValue());
}
局限性
如果要引用数组或者集合的索引,foreach 语句无法做到,foreach 仅仅老老实实地遍历数组或者集合一遍。
总结
1、foreach 语句是 for 语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。提倡能用 foreach 的地方就不要再用 for 了。
2、在用到数组索引的情况下,foreach 显得力不从心,这个时候是用 for 语句的时候了。
3、foreach一般结合泛型使用
forEach() 方法
forEach() 方法用于遍历动态数组中每一个元素并执行特定操作。
数组循环
举例:数组每个元素乘 10 并输出
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.forEach((e) -> {
e = e * 10;
System.out.print(e + " ");
});
运行结果:
以上程序中,我们将匿名函数 lambda 的表达式作为 forEach() 方法的参数传入,lambda 表达式将动态数组中的每个元素乘以 10,然后输出结果。
集合循环
LinkedList<String> list = new LinkedList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.forEach(v -> System.out.println(v));
Map循环
Map<String, String> map = new HashMap<String, String>();
map.put("0", "毫米");
map.put("1", "厘米");
map.put("2", "分米");
map.put("3", "米");
map.forEach((k, v) -> {
System.out.println("key:" + k + "\tvalue:" + v);
});
使用 forEach() 方法的主要优点是在并行流上调用它时,在这种情况下,我们不需要编写代码即可并行执行。使用 forEach + Lambda 表达式之后,代码量减少了很多。
二者差别不大,具体可以看 foreach和list.ForEach的区别