精华内容
下载资源
问答
  • 2021-02-17 11:31:27

    目录

    一、Java中Iterator迭代器详解

    1、为什么需要迭代器

    2、迭代器长什么样子

    3、如何使用迭代器

    使用步骤:

    代码演示:

    迭代器可以简化为增强型for循环:

    4、Iterator与ListIterator有什么区别


    一、Java中Iterator迭代器详解

    1、为什么需要迭代器

    Java中的集合各式各样,很多应用场景下需要对集合里面的元素进行遍历,有的集合有下标(ArrayList、Vector、LinkedList),有的集合没有下标。有下标的集合可以轻易地通过下标进行遍历,没有下标的集合遍历起来就非常麻烦,因此Java引入了迭代器模式迭代器可以使得我们能够使用一种通用的方式遍历各种集合元素

     

    2、迭代器长什么样子

    // 迭代器主要提供下面这三个方法
    public interface Iterator<E> {
        // 是否有下一个元素
        boolean hasNext();
        // 获取下一个元素
        E next();
        // 删除元素
        void remove();
    }

     

    3、如何使用迭代器

    使用步骤:

    • 获取迭代器;

    • 判断是否存在下一个元素;

    • 获取下一个元素;

     

    代码演示:

    package com.zibo.java.february.third;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class MyListStudy {
        public static void main(String[] args) {
            // 创建一个list
            List<String> list = new ArrayList<>();
            list.add("大哥");
            list.add("二哥");
            list.add("三哥");
            list.add("四哥");
            // 获取迭代器;
            Iterator<String> iterator = list.iterator();
            // 判断是否存在下一个元素;
            while (iterator.hasNext()){
                // 获取下一个元素;
                System.out.println(iterator.next());
            }
        }
    }

     

    迭代器可以简化为增强型for循环:

    package com.zibo.java.february.third;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class MyListStudy {
        public static void main(String[] args) {
            // 创建一个list
            List<String> list = new ArrayList<>();
            list.add("大哥");
            list.add("二哥");
            list.add("三哥");
            list.add("四哥");
            // 获取迭代器;
            // 判断是否存在下一个元素;
            for (String s : list) {
                // 获取下一个元素;
                System.out.println(s);
            }
            // 增强型for循环内部使用的就是迭代器
        }
    }

     

    4、Iterator与ListIterator有什么区别

    Iterator只能正向遍历集合,适用于获取移除元素。ListIerator继承自Iterator,专门针对List,可以从两个方向遍历List,同时支持元素的修改;

     

     

     

     

     

     

     

     

     

     

    更多相关内容
  • 集合遍历接口java.util.IteratorIterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,...
  • 主要介绍了Java中Iterator迭代器的用法,比较简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • Iterator迭代器的用法

    2018-12-11 21:12:28
    该文档是演示迭代Iterator的使用方法和源代码,其中包括了Iterator的继承类的讲解和再Iterator中的两种方法
  • iterator迭代

    千次阅读 多人点赞 2021-09-04 23:57:41
    1、什么是迭代器(Iterator) 迭代器是一种特殊对象,是为各数据结构的迭代过程设计的专有接口。迭代器对象都有一个next。方法,每一次调用next方法 , 都会返回数据结构的当前成员的信息,即返回一个对象: {done:...

    1、什么是迭代器(iterator)

    迭代器是一种特殊对象,是为各数据结构的迭代过程设计的专有接口。迭代器对象都有一个next。方法,每一次调用next方法 , 都会返回数据结构的当前成员的信息,即返回一个对象:

    {done: Boolean, value: any}

    value:当前成员的值。

    done:布尔值,表示遍历是否结束。

    这样不断调用next方法,直到遍历结束。

    //用ES5创建一个迭代器:
    function createlterator(arr){
        var i = 0;
        return {
            next: function(){
                var done = (i >= arr.length);
                var value = !done? arr[i++]:undefined;
                return {
                    done: done,
                    value: value
                }
             }
        }
    }
    var iterator = createlterator([1,2,3]);
    console.log(iterator.next());
    //{done: false, value: 1}
    console.log(iterator.next());
    // {done: false, value: 2}
    console.log(iterator.next());
    //{done: false, value: 3}
    console.log(iterator.next());
    //{done: true, value: undefined}

    上述ES5的例子较复杂,ES6引入了生成器 Generator,它是一种以更简单的方式创建迭代器的函数。该函数通过function后的星号"*"表示,使用内部专用关键字yield作为暂停标识,yield后表达式的值即为迭代器next。返回值中的value值。

    //用ES6生成器创建一个迭代器:
    function *createlterator(arr){
        for (let i=O;i<arr.length;i++){
            yield arr[i];
        }
    }
    let iterator = createlterator([1,2,3]);
    console.log(iterator.next());
    // {done: false, value: 1}
    console.log(iterator.next());
    // {done: false, value: 2}
    console.log(iterator.next());
    //{done: false, value: 3}
    console.log(iterator.next());
    //{done: true, value: undefined}

    当我们调用Generator函数时,并不会执行该函数,而是返回一个迭代器。

    当该迭代器调用next方法时,就会开始执行函数,在执行完第一句yield语句后自动暂停,并将yield
    后的表达式的值作为其返回值的value。

    当再次调用next方法时才会从上次停止的地方(yield [表达式]处的后面)开始继续执行,直到执行
    完下一句yield语句。 

    2、什么是可迭代对象(iterator)

    如果对象含有Symbol.iterator属性,就认为是可迭代的。Symbol.iterator本身是一 个函数,即当前数据结构的迭代器生成函数(生成器或es5函数),可以返回一个作用于附属对象的迭代器 。 常见 的Array, Map, Set, String, arguments 等都是原生可迭代对象 , 具有内置的Symbol.iterator属性(生成器),ES6的for-of需要用到可迭代对象的该属性。

    3、for-of循环机制

    可迭代对象可以使用一些ES6方法,例如 for..of语句和扩展运算符(…)。for-of在可迭代对象上创建一个迭代循环,并为每个不同属性的值执行语句。其原理是首先会调用[Symbol.iterator]。方法,返回一个迭代器对象,内含next。方法,然后重复调用 next。方法,循环一次就调用一次并得到返回值中的value。

    4、访问迭代器

    //通过Symbol.iterator。来访问可迭代对象的迭代器
    let items = [1,2,3];
    let iterator = items[Symbol.iterator]();
    console.log(iterator.next());
    // {done: false, value: 1}
    console.log(iterator.next());
    // {done: false, value: 2}
    console.log(iterator.next());
    // {done: false, value: 3}
    console.log(iterator.next());
    //{done: true, value: undefined}

    5、普通对象变可迭代对象

    一般开发中定义的对象都是不可迭代对象 ,不能使用 for - of ( 会报错 : xx is not iterable)。但如果给对象部署 Symbol.iterator属性,添加一个生成器 (es5传统生成函数也可以,但用生成器是 主流),可以使其变为可迭代对象。

    let obj = {
        "0":"aa",
        "1":"bb",
        "2":"cc"
    }
    obj[ Symbol.iterator ] = function *(){
        for(let key in this){
            let val = this[key];
            yield val;
        }
    }
    for(let i of obj){
        console.log(i)
    }
    //aa
    //bb
    //cc 

    6、总结

    迭代器:一种可以调用内部next方法进行 手动迭代的对象。

    生成器:一种用来创建迭代器的函数。

    可迭代对象:一种具有Symbol.iterator属性或称iterator接口的能被for of语句自动迭代的对象。Symbol.iterator属性对应着一个迭代器生成函数。

    另外:通过生成器(*)返回的迭代器同时也是可迭代对象 。 因为生成器会默认为其添加 Symbol.iterator属性,会返回该迭代器本身。这样可以让一个迭代器也能被可迭代对象的语法(for of或展开符…)所应用。如果是用es5函数创建的迭代器 , 返回时一般会自主添加 [Symbol.iterator]: function(){ return this },使其也成为可迭代对象。 

    展开全文
  • iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可以从集合获取一个迭代器 迭代器的两个基本操作 hasNext——查询容器中是否有下一个元素 ...
  • Iterator迭代器讲解

    2017-11-07 15:49:08
    java中Iterator迭代器讲解,基础数据对象。
  • Java-Iterator迭代器与foreach循环

    千次阅读 多人点赞 2022-04-20 23:08:32
    Iterator迭代器与foreach两种循环一、 Iterator迭代器接口1. 使用 Iterator 接口遍历集合元素2. Iterator接口的方法3. 迭代器的执行原理3.1 代码演示3.2 代码执行过程解析4. Iterator接口remove()方法4.1 代码演示...



    前言

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
    也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,欢迎关注!

    一、 Iterator迭代器接口

    1. 使用 Iterator 接口遍历集合元素

    Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。

    GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”。

    Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了 Iterator接口的对象。

    Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator对象,则必须有一个被迭代的集合。

    ⭕集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。

    2. Iterator接口的方法

    在这里插入图片描述

    注意:在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。

    3. 迭代器的执行原理

    3.1 代码演示

    //hasNext():判断是否还有下一个元素
    while(iterator.hasNext()){
    //next():①指针下移 ②将下移以后集合位置上的元素返回
    System.out.println(iterator.next());
    }
    

    3.2 代码执行过程解析

    当执行Iterator iterator = coll.iterator();语句时,iterator的指针此时执行下图的①所标的位置,然后执行iterator.hasNext()语句,此时会去判断iterator的指针指向的位置的下一个位置(即②)有无元素,若有,则返回true,否则返回false。当返回结果为true时,则往下执行 iterator.next()语句,此时iterator的指针下移并且把下移后的指针指向的集合位置上的元素返回。

    在这里插入图片描述

    4. Iterator接口remove()方法

    4.1 代码演示

    Iterator iter = coll.iterator();//回到起点
    while(iter.hasNext()){
    Object obj = iter.next();
    if(obj.equals("Tom")){
    iter.remove();
    } }
    

    4.2 注意

    Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。

    ⭕ 如果还未调用next()或在上一次调用 next() 方法之后已经调用了 remove 方法,再调用remove都会报IllegalStateException异常。

    5. 代码演示

        @Test
        public void test1(){
            Collection coll = new ArrayList();
            coll.add(123);
            coll.add(456);
            coll.add(new Person("Jerry",20));
            coll.add(new String("Tom"));
            coll.add(false);
    
            Iterator iterator = coll.iterator();
            //方式一:
    //        System.out.println(iterator.next());
    //        System.out.println(iterator.next());
    //        System.out.println(iterator.next());
    //        System.out.println(iterator.next());
    //        System.out.println(iterator.next());
    //        //报异常:NoSuchElementException
    //        System.out.println(iterator.next());
    
            //方式二:不推荐
    //        for(int i = 0;i < coll.size();i++){
    //            System.out.println(iterator.next());
    //        }
    
            //方式三:推荐
            hasNext():判断是否还有下一个元素
            while(iterator.hasNext()){
                //next():①指针下移 ②将下移以后集合位置上的元素返回
                System.out.println(iterator.next());
            }
    
        }
    
       @Test
        public void test2(){
    
            Collection coll = new ArrayList();
            coll.add(123);
            coll.add(456);
            coll.add(new Person("Jerry",20));
            coll.add(new String("Tom"));
            coll.add(false);
    
            //错误方式一:
    //        Iterator iterator = coll.iterator();
    //        while((iterator.next()) != null){
    //            System.out.println(iterator.next());
    //        }
    
            //错误方式二:
            //集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
            while (coll.iterator().hasNext()){
                System.out.println(coll.iterator().next());
            }
    
    
        }
    
        //测试Iterator中的remove()
        //如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,
        // 再调用remove都会报IllegalStateException。
    
     @Test
        public void test3(){
            Collection coll = new ArrayList();
            coll.add(123);
            coll.add(456);
            coll.add(new Person("Jerry",20));
            coll.add(new String("Tom"));
            coll.add(false);
    
            //删除集合中"Tom"
            Iterator iterator = coll.iterator();
            while (iterator.hasNext()){
    //            iterator.remove();
                Object obj = iterator.next();
                if("Tom".equals(obj)){
                    iterator.remove();
    //                iterator.remove();
                }
    
            }
            //遍历集合
            iterator = coll.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    
    

    二、foreach 循环

    1. 概述

    Java 5.0 提供了 foreach 循环迭代访问 Collection和数组。

    ⭕ 遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。

    ⭕ 遍历集合的底层调用Iterator完成操作。

    foreach还可以用来遍历数组。

    2. 语法解析

    在这里插入图片描述

    3. 代码演示

        @Test
        public void test1(){
            Collection coll = new ArrayList();
            coll.add(123);
            coll.add(456);
            coll.add(new Person("Jerry",20));
            coll.add(new String("Tom"));
            coll.add(false);
    
            //for(集合元素的类型 局部变量 : 集合对象)
            //内部仍然调用了迭代器。
            for(Object obj : coll){
                System.out.println(obj);
            }
            //123
            //456
            //Person@621be5d1
            //Tom
            //false
        }
    
     @Test
        public void test2(){
            int[] arr = new int[]{1,2,3,4,5,6};
            //for(数组元素的类型 局部变量 : 数组对象)
            for(int i : arr){
                System.out.println(i);
            }
            //1
            //2
            //3
            //4
            //5
            //6
        }
    

    4. 易错题

    public class test {
        public static void main(String[] args) {
            String[] str = new String[5];
            for (String myStr : str) {
                    myStr = "小老师ir";
                    System.out.println(myStr);
            }
            //小老师ir
            //小老师ir
            //小老师ir
            //小老师ir
            //小老师ir
            for (int i = 0; i < str.length; i++) {
                    System.out.println(str[i]);
            }
            //null
            //null
            //null
            //null
            //null
        }
    }
    
    展开全文
  • Iterator迭代器使用学习

    千次阅读 2022-03-29 22:44:55
    Iterator是集合的迭代器,简单来说,用于遍历集合 Iterator的三个常用方法为 hasNext、next、remove Iterator的语法格式 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; ...

    Iterator用出

    Iterator是集合的迭代器,简单来说,用于遍历集合

    Iterator的三个常用方法为 hasNext、next、remove

    Iterator的语法格式

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class Test01 {
        public static void main(String[] args) {
            Collection c = new ArrayList<>();
    
            c.add("张山");
            c.add("李四");
            c.add("王五");
            c.add("赵六");
            c.add("钱七");
            c.add("不知道");
    
            Iterator iterator = c.iterator();//放回的是一个迭代器
    
            while (iterator.hasNext()){
                Object obj = iterator.next();//返回的是obj类
                System.out.println(obj);
            }
    
        }
    }
    

    Itreator的特殊之处

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class Test01 {
        public static void main(String[] args) {
            Collection c = new ArrayList<>();
    
            c.add("张山");
            c.add("李四");
            c.add("王五");
            c.add("赵六");
            c.add("钱七");
            c.add("不知道");
    
            Iterator iterator = c.iterator();//放回的是一个迭代器
    
            while (iterator.hasNext()){
                Object obj = iterator.next();//返回的是obj类
                System.out.println(obj);
    
                if (obj.equals("不知道")){
    
                    //c.remove(obj);//无法做到,会报错
    
                    iterator.remove();//会删除当前匹配到的元素
    
                }
    
            }
    
        }
    }
    

    Iterator可以在迭代的时候删除元素,但是要借用Iterator的remove方法!

    Object obj = iterator.next();//返回的是obj类

    这条语句可以用其他类来转换

    //eg:
    Arraylist Points;
    
    Iterator iterator = Points.iteartor;
    
    Point point = (Point)iteartor.hasNext();
    

    道理都是相同的,要灵活的去应用。

    学习出处

    课程列表_牛客网 (nowcoder.com)

    【狂神说Java】GUI编程入门到游戏实战_哔哩哔哩_bilibili

    展开全文
  • 主要介绍了Java使用Iterator迭代器遍历集合数据的方法,结合实例形式分析了java迭代器进行集合数据遍历的常见操作技巧,需要的朋友可以参考下
  • Python中的迭代器意义不仅是在iter函数上的运用,更是一种处理可迭代对象的迭代器模式,这里我们来简单聊聊Python中Iterator迭代器的使用杂谈:
  • python Iterator 迭代器通俗理解 在详细介绍迭代器的内容之前,这里先介绍一下,迭代器的优点,方便大家在后续使用中,心里清楚为什么大家都推崇使用迭代器。迭代器的优点主要有: 迭代器是python遍历集合元素的一...
  • Iterator 迭代

    2022-02-18 01:23:07
    Iterator 迭代
  • 主要给大家介绍了关于PHP中Iterator迭代对象属性的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PHP具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 前言 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列...public interface Iterator {  boolean hasNext();  Object next(); //需要强制转换成自己需要的类型  vo
  • 主要介绍了Java如何使用Iterator迭代器删除集合重复选项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 使用Iterator迭代器循环遍历List时,在一次while循环中,连续多次调用next方法获取元素进行判断。因为next会让迭代器中的下标进行加1,然后在比对长度时,下标超出了List长度,抛出了NoSuchElementException异常。 ...
  • 迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节,只要拿到这个对象,使用迭代器就可以...
  • 主要介绍了Java集合Iterator迭代接口的实现方法,非常不错,具有参考借鉴家,对Java 结合iterator知识感兴趣的朋友一起看看吧
  • 主要介绍了如何实现java Iterator迭代器功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Iterator迭代器与foreach循环

    千次阅读 2019-08-20 23:39:36
    Iterator迭代器 1. Iterator介绍 在程序的开发中,经常需要遍历集合中所有的元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口也是java集合中的一员,但它与Collection、Map接口有所...
  • 【Java每日面试题】Iterator迭代器到底是什么?

    千次阅读 多人点赞 2021-06-27 17:58:42
    我们常使用 JDK 提供的迭代接口进行 Java 集合的迭代Iterator iterator = list.iterator(); while (iterator.hasNext()) { String string = iterator.next(); //do something } 迭代可以简单地理解为遍历,是...
  • 迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,接下来通过本文给大家分享Java Iterator迭代器_动力节点Java学院整理,需要的朋友参考下吧
  • Iterator迭代器原理和使用

    千次阅读 2019-08-20 19:38:15
    Iterator迭代器原理和应用场景 ​ 在程序开发中,经常需要遍历集合中的所有元素.Iterator正是实现此功能的接口.Iterator主要用于迭代访问(遍历)集合中的元素,因此,Iterator对象也被称为迭代器.那么它是如何遍历集合...
  • Iterator迭代器 Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有元素则把元素取出,然后继续再判断下一个元素,如果还有就再取出,直到把集合中的所有元素全部取出为止。这种取出...
  • 迭代器遍历方式, 适用于连续内存存储方式,比如数组、 ArrayList(其实 ArrayList底层实现也是数组形式)。 缺点是只能从头开始遍历, 优点是可以边遍历边删除ConcurrentModificationException**异常。 如何判断...
  • 迭代器的使用 package Test; import java.util.ArrayList; import java.util.Iterator; public class Test7 { public static void main(String[] args) { // 创建一个集合对象 ArrayList a1 = new ArrayList();...
  • 主要介绍了Java编程Iterator迭代器设计原理及实现代码示例,具有一定参考价值,需要的朋友可以了解下。
  • 详解Java中Iterator迭代器的用法迭代器(Iterator)迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小...
  • Iterator迭代器: Iterator接口: 在程序开发中,经常需要遍历集合中的所有元素,数组中我们可能会使用for循环通过其索引来遍历整个集合,但是有些集合中没有索引,我们无法通过for循环来遍历,针对这种需求,JDK...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 297,897
精华内容 119,158
关键字:

Iterator迭代