首先来回顾一下for循环的一些语法
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}
举个例子,用for循环来遍历数组
int[] arr= {1,5,6,7,8,18,19,21,4};
for (int i = 0; i < arr.length-1; i++) {
System.out.println(arr[i]);
}
for循环的重点是他的索引(即数组的下标),这个i是可以知道,可以获得的。
什么是增强for循环呢?
其实是Java SE5引入了一种更加简洁的 for 语法用于数组 和 容器,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。通常用来遍历数组和集合。其本质是通过for循环实现对迭代器的调用,所以使用前提是能够进行迭代。
增强for循环的语法:
for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){
循环体;
}
通常用增强for循环来遍历,(仅仅是遍历),下面代码举例:
int[] arr= {1,5,6,7,8,18,19,21,4};
for (int i : arr) {
System.out.println(i);
}
注意:输出语句中System.out.println(i),括号内的是变量名,而不是通常的数组名加索引arr[i];
相当于是把数组里面的值重新赋给了变量i,对原数组不发生改变。
foreach循环无需循环条件,无需循环迭代语句,这些都由系统来完成,foreach 循环自动迭代数组的每个元素,当每个元素都被迭代一次后,foreach循环自动结束。
当使用foreach来迭代访问数组元素时,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。因此,如果希望改变数组元素的值,则不能使用这种 foreach 循环。
通常使用foreach循环来遍历数组或集合,这样的做法很方便简洁,代码量少。仅仅遍历的话不考虑下标索引,建议使用加强for循环。
上面在说增强for循环时,经常提到迭代器这一个概念,那么到底什么是迭代器呢?
迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需暴露该对象的内部细节。迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。
1、Iterator对象成为迭代器,主要用于遍历collection集合中的元素
2、所有实现了Collection接口的集合类都有一个iterator()方法,用来返回一个实现了Iterator接口的对象。
3、Iterator仅用于遍历集合,Iterator本身并不存放对象。
hasNext():判断集合是否还有元素,如果返回true表示集合还有元素,返回false表示集合中 没有元素;一般对集合的访问通过while(hasNext)判断是否还需要遍历。
next():获取集合中遍历的当前元素,一般先调用hasNext()方法判断是否存在元素,再调用 next()获取元素,需要进行循环交替遍历集合中的元素。
remove:删除集合中的元素。
下面用代码来举例
List list=new ArrayList<>(); //定义一个集合来装一些数字
//装一些数字
list.add(18);
list.add(595);
list.add(333);
list.add(444);
Iterator iterator=list.iterator(); //定义一个迭代器,来遍历list集合
while(iterator.hasNext()) { //判断这个集合中是否有元素可以迭代
int num=iterator.next(); //在集合中取出迭代的数字 来存入num中
System.out.println(num);
}
运行结果如下:
用上面的案例,集合中有18,595,333,444四个值,现在我们将333删除,代码如下。
List list=new ArrayList<>(); //定义一个集合来装一些数字
//装一些数字
list.add(18);
list.add(595);
list.add(333);
list.add(444);
System.out.println("删除前"+list);
Iterator iterator=list.iterator(); //定义一个迭代器,来遍历list集合
while(iterator.hasNext()) { //判断这个集合中是否有元素可以迭代
int num=iterator.next(); //在集合中取出迭代的数字 来存入num中
if(num==333)
iterator.remove();
}
System.out.println("删除后"+list);
运行结果如下:
对于增强for循环与迭代器的学习就到这里,欢迎各位大佬的指点。