集合(10):增强for循环的概述和使用
增强for循环属于JDK1.5之后的特性
到目前为止,学过哪些特性是JDK1.5之后出现的:泛型,增强for,包装类,Scanner,枚举
一、增强for循环的介绍
1、增强for循环概述
简化数组和Collection集合的遍历
2、格式
格式:
for(元素数据类型 变量名(自定义) : 数组或者Collection集合) {
使用变量即可,该变量就是元素
}
快捷键:iter回车
3、好处及其注意事项
好处:
(1)简化遍历
(2)将来能用增强for的时候,就用增强for,可以消除黄色警告线
注意事项:增强for的目标要判断是否为null
把前面的集合代码的遍历用增强for改进
二、增强for循环的应用
1、遍历数组
public class ForDemo1 {
public static void main(String[] args) {
//定义一个数组
int[] arr = {1,2,3,4,5,6};
System.out.println("====普通for循环遍历====");
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("====增强for循环遍历====");
for(int x : arr){
System.out.println(x);
}
执行结果为:
====普通for循环遍历====
1
2
3
4
5
6
====增强for循环遍历====
1
2
3
4
5
6
Process finished with exit code 0
//二者遍历的效果一样,只是增强for循环更简化一点
2、遍历Collection集合
public class ForDemo1 {
public static void main(String[] args) {
//创建Collection子类的对象,加上泛型
ArrayList<String> strings = new ArrayList<>();
//向集合中添加元素
strings.add("hello");
strings.add("world");
strings.add("java");
strings.add("bigdata");
strings.add("hadoop");
for (String string : strings) {
System.out.println(string);
}
/*
创建对象的时候,指针指向地址值;在以后的开发中,
如果一不小心strings = null;那么遍历的时候就会报错
所以我们在遍历之前需要判断一下是不是为null
*/
System.out.println("====加入判断====");
if(strings!=null){
for (String s : strings){
System.out.println(s);
}
}
}
}
执行结果如下:
hello
world
java
bigdata
hadoop
====加入判断====
hello
world
java
bigdata
hadoop
Process finished with exit code 0
由此可见,使用增强for循环的时候,可以多次遍历;
而使用迭代器遍历的时候,调用一次迭代器,只能遍历一次;
增强for循环并不是万能的,在遍历的时候添加元素,会并发修改异常,
这时候就不能使用增强for循环,只能使用迭代器
public class ForDemo1 {
public static void main(String[] args) {
//创建Collection子类的对象,加上泛型
ArrayList<String> strings = new ArrayList<>();
//向集合中添加元素
strings.add("hello");
strings.add("world");
strings.add("java");
strings.add("bigdata");
strings.add("hadoop");
/*
for(String s:strings){
if("world".equals(s)){
strings.add("spark");
}
}
使用增强for循环,在遍历的时候添加元素,执行时会报错
*/
ListIterator<String> iterator = strings.listIterator();
while (iterator.hasNext()){
String next = iterator.next();
if("world".equals(next)){
/*
添加元素的时候,
不能使用strings.add("spark");来添加元素,会报错
必须使用迭代器名调用,iterator.add("spark");
迭代器调用方法的时候,底层是调用集合的方法;
最终添加的元素会添加到集合里面去,而不会添加到迭代器里
*/
iterator.add("spark");
}
System.out.println(next);
}
System.out.println(strings);
}
}
执行结果如下:
hello
world
java
bigdata
hadoop
[hello, world, spark, java, bigdata, hadoop]
Process finished with exit code 0