在Java的学习中,我们已经习惯了使用for循环来进行遍历操作。这种操作在普通的数组和字符串中是非常有效的。但是当我们引入了集合这个概念,并且将多个不同的字符串储存进某一个集合的时候,我们发现原先的for循环是依赖于数组索引或者字符串索引的。
我们试想:在集合中,我们是否也可以引入索引的概念,并且利用索引来进行遍历操作呢?
答案是不完全地可以:由于集合分为两种:单列集合(list)与双列集合(set)而其中仅有单列集合存在”索引“概念,因此我们只可以在前者中拓展for循环的使用空间,这种被拓展到单列集合中的for循环,我们称其为——增强for循环,所谓增强,也就是在一个单列集合中,可以使用。
我们现在来看一个简单的例子
import java.util.ArrayList;
import java.util.Collection;public class Main{public static void main(String[] args){//增强for遍历->底层就是迭代器->为了简化迭代器的书写我们设计了//内部原理->就是Iterator迭代器 在JDK5出现的//只有(单列集合)与(数组)使用增强for来遍历/*for(元素数据类型 变量名:数组或者集合){};*///1.创建集合并且添加元素Collection<String> coll = new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.使用增强for进行遍历//注意点://S就是一个第三方变量,在循环中会依次表示的每一个数据//注意 字符串"zhangsan" "lisi" "wangwu"都会被依次赋值给s 因此我们直接打印s 就可以了//这里for循环的终止条件其实是自动设计的 Java会判断集合的大小 自动设置上限 到达上限自动结束循环for(String s:coll){System.out.println(s);}System.out.println(coll);//增强for循环的小细节:/*其中的s只是一个简单的第三方变量 修改这个第三方变量不会修改集合原本的数据* 就像我们在for(String s:coll)的循环体里面* s="qqq"修改这个第三方变量的值 发现无法改变集合的输出结果* 因为s是一个第三方变量 不会改变集合中原有的数据* */}
}
我们关注以下的语法结构:
for(元素数据类型 变量名:数组或者集合){
};
除去语法结构的,其余的注意事项在代码中注解更方便理解,请耐心阅读代码的注释
以下是一个用增强for循环来遍历数组的实例:
public class Main{public static void main(String[] args){int[] arr = {1,2,3,4,5,6,7,8,9,10};for(int s:arr){System.out.println(s);}/*分析这个代码结构:1.定义数组 并且储存值2.写一个增强for循环 在这里我们可以学习到两个细节:a. 我们在for循环的数据类型中填入的是int 而不是int[]b. 我们在循环中只输出第三方变量s 说明第三方变量s的类型也是int类型并且每当循环进行一次时,数组中下一个索引所指向的数据就会被赋值给int类型的s譬如:第一次循环数组 我们将Index为0的1赋值给s 于是System.out.println可以输出1第二次循环数组 index从0变化到1 我们将索引为1的值赋值给s 这个赋的值就是2 于是s就变成了2 输出结果也就是2第三次循环数组.....一直到第10次循环数组 这种逻辑关系其实也就这样建立了*/}
}
下面我们采取一个间接的方法对字符串中的字符进行输出
实现的逻辑就是:字符串->数组->加强for循环
public class Main{public static void main(String[] args){String str = "字符串也可以间接使用加强for喔";char[] arr = new char[18];for(int i=0;i<str.length();i++){arr[i]=str.charAt(i);}for(char c:arr){System.out.println(c);}}
}