Java中集合遍历Iterator迭代器执行原理 迭代器模式 foreach 增强for循环

   日期:2020-08-09     浏览:89    评论:0    
核心提示:文章目录1、Iterator迭代器2、开发中推荐使用方式3、错误使用方式4、Iterator迭代器中remove()方法5、利用迭代器实现的增强for循环遍历或者说foreach遍历1、Iterator迭代器用来遍历Colletioon接口实现的集合,返回Iterator接口的实例。①Iterator迭代器:专门用来遍历List、Set接口实现的集合,它不是一个容器,是Colletion接口中的一个遍历集合的方法,相当于火车上的乘务员的检票过程;②迭代器模式:提供一种方法访问一个容器(contain

文章目录

    • 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 

有用点个关注,手留余香!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服