zoukankan      html  css  js  c++  java
  • Java进阶--Iterator迭代器

    Iterator迭代器

    1.1 Iterator接口


    在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.IteratorIterator接口也是Java集合中的一员,但它与CollectionMap接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。


    想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:

    • public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。


    下面介绍一下迭代的概念:

    • 迭代即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。


    Iterator接口的常用方法如下:

    • public E next():返回迭代的下一个元素。
    • public boolean hasNext():如果仍有元素可以迭代,则返回 true。

    迭代器的使用步骤:
            1.使用集合的方法iterator()获取迭代器对象实现类对象,使用Iterator接口接收(多态)
            2. 使用Iterator接口中的hasNext()方法,判断是否还有下一个元素
            3. 使用Iterator接口的Next()方法,取出集合中的下一个元素
    接下来我们通过案例学习如何使用Iterator迭代集合中元素:

    package 集合和泛型.Iterator;
    
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Iterator;
    
    /**
     * java.util.Iterator接口:迭代器
     *   Iterator接口的常用方法如下:
     *      public E next():返回迭代的下一个元素。
     *      public boolean hasNext():如果仍有元素可以迭代,则返回 true。
     *  Iterator迭代器,是一个接口,我们无法直接使用,需要Iterator接口的实现类对象,获取实现类的方式比较特殊
     *  Collection接口中有一个iterator方法,这个方法返回的是迭代器对象
     */
    public class Demo01Iterator {
        public static void main(String[] args) {
            demo01();
        }
        public static void demo01(){
            // 迭代器的使用步骤:
            // 1.使用集合的方法iterator()获取迭代器对象实现类对象,使用Iterator接口接收(多态)
            // 2. 使用Iterator接口中的hasNext()方法,判断是否还有下一个元素
            // 3. 使用Iterator接口的Next()方法,取出集合中的下一个元素
    
            Collection<String> coll = new HashSet<>();  // 创建集合对象
            coll.add("a");
            coll.add("b");
            coll.add("c");
            coll.add("d");
    
            Iterator<String> iterator = coll.iterator();    // 创建迭代器
            while (iterator.hasNext()){                     // 使用迭代器遍历
                String s = iterator.next();
                System.out.println(s);
            }
        }
    }
    

    tips::在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生java.util.NoSuchElementException没有集合元素的错误。

    1.2 迭代器的实现原理


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


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

    1.3 增强for


    增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。


    格式:

    for(元素的数据类型  变量 : Collection集合or数组){ 
      	//写操作代码
    }
    


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

    练习1:遍历数组

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

    练习2:遍历集合

    public class NBFor {
        public static void main(String[] args) {        
        	Collection<String> coll = new ArrayList<String>();
        	coll.add("小河神");
        	coll.add("老河神");
        	coll.add("神婆");
        	//使用增强for遍历
        	for(String s :coll){//接收变量s代表 代表被遍历到的集合元素
        		System.out.println(s);
        	}
    	}
    }
    

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

  • 相关阅读:
    解决PKIX:unable to find valid certification path to requested target 的问题
    Linux 上的常用文件传输方式介绍与比较
    用VNC远程图形化连接Linux桌面的配置方法
    红帽中出现”This system is not registered with RHN”的解决方案
    linux安装时出现your cpu does not support long mode的解决方法
    CentOS SSH配置
    es6扩展运算符及rest运算符总结
    es6解构赋值总结
    tortoisegit安装、clon、推送
    es6环境搭建
  • 原文地址:https://www.cnblogs.com/sinlearn/p/13371908.html
Copyright © 2011-2022 走看看