在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);
}
}
}