ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

集合——Iterator 接口(迭代器)

2019-09-10 10:07:40  阅读:185  来源: 互联网

标签:Iterator 迭代 System 接口 coll println


在程序开发过程中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口。

java.util.Iterator接口。Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,

Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,

因此Iterator对象也被称为迭代器。

 

迭代:即Collection集合元素的通用获取方式。

在获取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,

继续再判断,如果还有就再取出来。一直把集合中的元素全部取出来。

这种方式专业术语称为迭代。

 

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

有两个常用的方法:

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

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

 

2.E next() 返回迭代下一个元素。

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

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

Iterator <E> iterator() 返回在此collection的元素上进行迭代的迭代器。

 

迭代器的使用步骤(**):

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

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

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

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class Demo01Iterator {
    public static void main(String[] args) {
        //创建一个集合对象
        Collection<String> coll = new ArrayList<>();  //左接口右实现类 多态
        //往集合中添加元素
        coll.add("姚明");
        coll.add("乔丹");
        coll.add("科比");
        coll.add("詹姆斯");
        coll.add("艾弗森");

        System.out.println(coll);

        /**
         1.使用集合中的方法iterator()获取迭代器的实现对象,使用Iterator接口接收(多态)
         注意:
         Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型。
         */

        //接口                     实现类对象
        Iterator<String> it = coll.iterator();  //多态

        //2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
        boolean b = it.hasNext();
        System.out.println(b);   //true

        //3.使用Iterator接口中的方法next取出集合中的下一个元素
        String s = it.next();
        System.out.println(s);

         b = it.hasNext();
        System.out.println(b);
        s = it.next();
        System.out.println(s);

         b = it.hasNext();
        System.out.println(b);
         s = it.next();
        System.out.println(s);

         b = it.hasNext();
        System.out.println(b);
         s = it.next();
        System.out.println(s);

         b = it.hasNext();
        System.out.println(b);
         s = it.next();
        System.out.println(s);

        b = it.hasNext();
        System.out.println(b);
        s = it.next();   //已经没有元素了 再取出元素 会抛出NoSuchElementException没有元素异常
        System.out.println(s);

    }
}

 

从上面代码发现,使用迭代器取出的集合元素的代码,是一个重复的过程

所以我们可以使用循环优化

在不知道集合有多少元素,使用while循环

循环结束的条件,hasNext方法返回false

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class Demo02Iterator {
    public static void main(String[] args) {

                //创建一个集合对象
                Collection<String> coll = new ArrayList<>();  //左接口右实现类 多态
                //往集合中添加元素
                coll.add("姚明");
                coll.add("乔丹");
                coll.add("科比");
                coll.add("詹姆斯");
                coll.add("艾弗森");

                System.out.println(coll);



        /**
         1.使用集合中的方法iterator()获取迭代器的实现对象,使用Iterator接口接收(多态)
         注意:
         Iterator<E>接口也是有泛型的,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型。
         */

        //接口                     实现类对象
        Iterator<String> it = coll.iterator();  //多态
/**
 从上面代码发现,使用迭代器取出的集合元素的代码,是一个重复的过程
 所以我们可以使用循环优化
 在不知道集合有多少元素,使用while循环
 循环结束的条件,hasNext方法返回false
 */
        //循环代码
        //①
        while (it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }

        //②
       for(Iterator<String> itr = coll.iterator();itr.hasNext();){
           String str1 = itr.next();
           System.out.println(str1);

       }
           }
}

标签:Iterator,迭代,System,接口,coll,println
来源: https://blog.csdn.net/Jason_LH1024/article/details/100689662

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有