zoukankan      html  css  js  c++  java
  • 集合遍历的方式(迭代器和增强for)

    集合遍历的方式

    Iterator迭代器

    2.1 Iterator接口

    Iterator接口对数组进行遍历

    在程序开发中,经常需要遍历集合中的所有元素。针对需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是java结合中的一员。

    Collection接口与Map接口主要用于储存元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器

    java.util.Iterator接口:迭代器(对接口进行遍历)

    有两个常用方法

    boolean hasNext() 如果仍有元素可以迭代,则返回 true

    ​ 就是判断集合中还有没有下一个元素,有就返回 true ,没有就返回false

    E next() 返回迭代的下一个元素

    ​ --> 取出集合中的下一个元素。

    Iterator迭代器,是一个接口,无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊。

    Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器得到实现类对象

    ​ Iterator iterator() 返回在此 collection 集合的元素上进行迭代的迭代器

    使用步骤(重点)

    1. 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)。

      注意:

      ​ Iterator 接口中也是有泛型的,迭代器的泛型和集合的一致。

    2. 使用Iterator接口中的方法hasNext判断还有没有下一个元素

    3. 使用Iterator接口中的方法next取出集合中的下一个元素

    public class Demo02Iterator {
        public static void main(String[] args) {
            // 创建一个集合对象
            Collection<String> coll = new ArrayList<>();
            // 往集合中添加元素
            coll.add("姚明");
            coll.add("科比");
            coll.add("詹姆斯");
            coll.add("麦迪");
            coll.add("艾弗森");
            /*
            * 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)。
            注意:
                Iterator<E> 接口中也是有泛型的,迭代器的泛型和集合的一致。
            * */
            // 多态   接口          实现类对象
            Iterator<String> it = coll.iterator();
    
            // 或者使用循环
            // while循环
            while (it.hasNext()) {
                String s = it.next();
                System.out.println(s);
            }
            System.out.println("-------------");
            // for 循环
            for (Iterator<String> it2 = coll.iterator(); it2.hasNext(); ) {
                String e = it2.next();
                System.out.println(e);
            }
           /* // 2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
            boolean b = it.hasNext();
            System.out.println(b);
    
            // 3. 使用Iterator接口中的方法next取出集合中的下一个元素
            String s = it.next();
            System.out.println(s);
    
            s = it.next();
            System.out.println(s);
            s = it.next();
            System.out.println(s);
            s = it.next();
            System.out.println(s);
            s = it.next();
            System.out.println(s);
            b = it.hasNext();
            System.out.println(b);
        */
        }
    }
    
    

    2.2 迭代器的实现原理

    我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

    Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:

    {{uploading-image-598408.png(uploading...)}}
    在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

    2.3 增强for

    增强for循环:底层使用的是迭代器,使用for循环的格式简化了迭代器的书写

    是JDK1.5之后出现的新特性
    Collectionextends Iterable:所有的单列集合都可以使用增强for循环
    public interface Iterable实现这个接口允许对象成为“foreach”语句的目标

    增强for循环:用来遍历集合和数组

    格式

    ​ For(集合/数组的数据类型 变量名 :数组名/集合名){
    ​ // 操作代码
    ​ }

    它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。

    练习1:遍历数组

    public static void main(String[] args) {
    	int[] arr = {1,2,3,5,6,9};
        // 使用增强for遍历数组
        for(int i:arr){
            // i 代表数组中的每个元素
            System.out.println(i);
        }
    }
    
    
    

    练习2:遍历集合

    public static void main(String[] args) {
        	Collection<String> coll = new ArrayList<String>();
        coll.add("神婆");
        coll.add("巫女");
        coll.add("神算子");
        // 使用增强for遍历
        for(String str:coll){
            // 接收变量str代表被便利的集合元素
            System.out.println(str);
        }
    }
    

    tips: 新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作为遍历操作出现。

  • 相关阅读:
    鼠标滑过,图片放大效果。
    ASP.NET自定义省市级联控件
    C++ Test单元测试工具
    网络超时检测
    电子工程师知识汇整【转】
    DDD进行调试 介绍 转
    VS2008配置PC Lint (静态代码检查工具PCLint)
    【转】三大UML建模工具Visio、Rational Rose、PowerDesign的区别
    第一个corba服务Hello World (转)
    python简介
  • 原文地址:https://www.cnblogs.com/anke-z/p/12527945.html
Copyright © 2011-2022 走看看