文章目录
- 1、Iterator迭代器
- 2、开发中推荐使用方式
- 3、错误使用方式
- 4、Iterator迭代器中remove()方法
- 5、利用迭代器实现的增强for循环遍历或者说foreach遍历
1、Iterator迭代器
用来遍历Colletioon接口实现的集合,返回Iterator接口的实例。
①Iterator迭代器:专门用来遍历List、Set接口实现的集合,它不是一个容器,是Colletion接口中的一个遍历集合的方法,相当于火车上的乘务员的检票过程;
②迭代器模式:提供一种方法访问一个容器(container)对象中各个元素,而不需要暴露该对象的内部细节。迭代器模式,可以说是专门为集合而生;
③集合对象每次调用iterator()都得到一个全新的的迭代器对象,默认游标都在集合的第一元素之前,下面有图示;
④内部有三个常见方法,hasNext() :判断当前集合里还有没有元素可有进行遍历;next() : 用来遍历打印集合中的元素;remove() : 可以在遍历到指定的元素时进行移除指定的元素,要注意的是在调用remove()时,一定要先调用next()方法,先让指针(游标)下移到元素上。
2、开发中推荐使用方式
Iterator iterator= coll.iterator();//coll为集合对象
while(iterator.hasNext()) {
// next():①指针下移;②将下移以后集合位置上的元素返回。
System.out.println (iterator.next());
}
3、错误使用方式
1)错误方式一,没有调用hasNext()
输出方式为:打印一个元素后跳一个元素不打印,再去打印下一个,就是去移动指针了,但没有去打印。并会报java.util.NoSunchElementException
Iterator iterator= coll.iterator();//coll为集合对象
while((iterator.next()) != null) {
System.out.println (iterator.next());
}
2)错误方式二,没有在while外去创建iterator对象
输出方式:会循环输出集合中第一个元素,死循环,原因是每次都会去创建一个新的iterator对象,而iterator的游标初始还是在第一个元素之前,next就是第一个元素,就打印第一个元素。
while(coll.iterator().hasNext()) {
System.out.println (iterator.next());
}
4、Iterator迭代器中remove()方法
Iterator iterator = coll.iterator(); //coll是一个集合对象
while(iterator.hasNext()) {
object obj = iterator.next();
if ("hello".equals(obj)) {
iterator.remove();
}
}
5、利用迭代器实现的增强for循环遍历或者说foreach遍历
1)、作用 :增强for循环是用来遍历数组(包括一维数组和二位数组)、集合。
2)、格式:
for (数组或集合元素类型 局部变量名 :数组或集合对象名) {
... //代码
}
3)、注意点:
这种遍历方式是在底层重新创建了一个数组或者集合,遍历过程中不会对原数组或者集合进行修改数据。
4)、代码演示:
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
int[][] arr = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
for (int[] arr1 : arr) { //foreach遍历二位数组
for (int i : arr1) {
System.out.print(i + " ");
}
System.out.println();
}
System.out.println("");
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (Integer integer : list) { //foreach遍历集合
System.out.print(integer + " "); //不换行输出
}
}
}
打印结果:
1 2 3
1 2 3
1 2 3
---------
1 2 3 4
有用点个关注,手留余香!