文章目录

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 + " ");
});

运行结果:
【达内课程】Java 中的 foreach 和 forEach()_动态数组
以上程序中,我们将匿名函数 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的区别​