java迭代器

这篇具有很好参考价值的文章主要介绍了java迭代器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java速解 迭代器

1. 迭代器是什么

它是一种接口,用于遍历集合,集的元素。

它位于集,集合每个元素的中间,通过移动迭代器其位置来遍历元素。

集合,集(比集合更严格的一种)中都存在迭代器。

如图: java迭代器

2.迭代器的方法解释

方法如图:

java迭代器

//询问是否有下一个元素,如果有返回true
boolean hasNext()
    
//返回将要访问的下一个对象,如果已到达了集合末尾,返回异常NoSuchElementException
E next()
    
//删除的是上次访问的对象。这个方法必须紧跟访问一个元素之后。
//使用next让迭代器越过下一位元素,随后next返回越过的对象,remove删除的就是越过的那位元素
//记住:不能连续使用remove()方法,他必须和next配合使用
void remove()default void forEachRemaning(Consumer<?super E> action)

我们可能会疑惑为什么没有add方法?

这就是我们要讲的iterator的子接口ListIterator

子接口ListIterator

​ ListIterator是Iterator的子接口,较比Iterator来说它多了一个在迭代器前面添加的元素的add()方法。

为什么不在Iterator方法里面设置add方法呢?

​ 我们需要明白Iterator存在于所有集合,集(set)中,这些集合有些是有序的(如List)还有些是无序的(如Map,Set等等)。add方法在Iterator方法中添加元素是在迭代器前面添加一个元素,对于有序的集合很简单,但是对于map,set等无序的添加一个元素在迭代器前面 ,是没有意义的同时添加所需要的散列函数也十分麻烦。但如果添加元素在集合的最末尾的话,集合本身也具有add方法何需Iterator呢? 对吧

ListIterator方法(含所有Iterator方法):

E previous();//类似next,返回越过的元素.
boolean hasPrevious();//查询是否有上一个元素,有则返回true
/*
previous和hasPrevious可用来逆循环遍历
*/
void set(E e);         //set()方法替换迭代器前面的元素 
void add(E e);         //添加一个元素在迭代器前面
int nextIndex();       //返回下一元素的目录索引
int previousIndex();   //返回当前元素的目录索引
 

注意:
 在调用next之后,remove方法确实会删除迭代器左侧的元素。但是,如果调用了previous,则会删除迭代器右侧的元素。而且不能连续调用两次 remove。
add方法只依赖于迭代器的位置,而remove方法不同,它依赖于迭代器的状态 
 
*/
Iterator,ListIterator的举例**

对Iterator的使用:

  //集合可以存储任意类型的对象
//当集合中不用泛型指定存储的数据类型时,集合什么都存。
        Collection coll = new ArrayList();
        coll.add("abc");
        coll.add("def");
        coll.add("opq");

           //获取迭代器
        Iterator iterator = coll.iterator();
//在使用Iterator时不可对原集合进行操作,否则将会破坏整个迭代器结构,使得迭代器在接下来将不会起作用。
//如下面的while循环,在使用iterator时,使用 coll.remove(str),使用这个集合当中的remove方法对当前迭代器当中的数据元素值进行删除操作,然后将会抛出异常。
        while (iterator.hasNext()) {
            Object str = iterator.next();
            if ("def".equals(str)) {
                //coll.remove(str);
                iterator.remove();
            }

        }
//输出:[abc, opq]
        System.out.println(coll);
 
//使用foreach遍历迭代器中元素
for (String item : coll) {
    if ("def".equals(item)) {
        list.remove(item);
    }

对ListIterator的使用:

 LList coll =  new ArrayList();

        //获取迭代器
        java.util.ListIterator listIterator = coll.listIterator();

        //添加元素
        listIterator.add("a");
        listIterator.add("ab");
        listIterator.add("abc");
        listIterator.add("abcd");

        System.out.println("正序:");
        while (listIterator.hasNext()){
             System.out.print(listIterator.next()+" , ");
         }

        System.out.println("逆序: ");
        while (listIterator.hasPrevious()){
             System.out.print(listIterator.previous()+" , ");
         }


3.java迭代器与c++迭代器的区别

c++迭代器根据数组索引创建的,查找操作与迭代器位置没有关系。给定的迭代器可以通过索引 i 直接找到其元素,不需要移动迭代器位置查找元素。

java迭代器中迭代器的查找操作与位置关系存在紧密的耦合,你查找一个元素必须使用next方法移动迭代器的位置,当迭代器越过一个元素便查找一个元素,依次查找直到找到所需元素,这样进行查找操作时迭代器位置也会发生。文章来源地址https://www.toymoban.com/news/detail-413342.html

java迭代器中迭代器的查找操作与位置关系存在紧密的耦合,你查找一个元素必须使用next方法移动迭代器的位置,当迭代器越过一个元素便查找一个元素,依次查找直到找到所需元素,这样进行查找操作时迭代器位置也会发生。

到了这里,关于java迭代器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是领域驱动设计?它是如何工作的?

    与业务领域无缝集成的软件能为企业带来一系列强大的优势。它可以简化操作,增强以用户为中心的功能,并为利益相关者提供实时洞察力,以便快速做出深思熟虑的决策。DDD 是一种软件开发方法,擅长在领域专家和开发人员之间提供这种一致性,将软件功能与业务需求直接

    2024年02月07日
    浏览(44)
  • 什么是单片机?它是如何工作的?

    家用电器包含各种各样的集成电路板。 在集成电路板上最重要的就是单片机(单片微型计算机)。它是一种集成电路芯片。 1.是什么? 2.作用 1.是什么? 2.有什么用? 1.是什么? 2.有什么用?

    2024年02月05日
    浏览(53)
  • 什么是Web3 ?它是如何工作的?

    Web3提供了一种潜在的解决方案,可以更容易地在万维网上找到内容的原始来源。我们将讨论Web 3是什么以及它是如何工作的。 万维网一直以来都是一个不受限制地创造和分享信息和思想的平台。虽然这让世界感觉更小,但它也有它的缺点,即难以确定内容的原始来源。这种不

    2024年01月25日
    浏览(40)
  • 什么是网络附加存储 (NAS),它是如何工作的

    什么是网络附加存储 (NAS)? 网络附加存储是在网络范围内工作的文件级存储,使异构设备能够访问非结构化数据文件,例如视频、音频、网站、文本文件和 Microsoft Office 文档。NAS 的优势包括低成本实施、易于访问以及支持高容量和 可扩展性。它还提供容错功能和内置的安全

    2024年02月04日
    浏览(35)
  • 【技术写作】技术的本质:技术是什么?它是如何演化的?

    图由AI绘制(By Stable Diffusion) 目录 技术是什么? 技术的本质 技术是如何演化的?

    2024年01月19日
    浏览(37)
  • Web 应用程序攻击:它是什么以及如何防御它?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在过去几年中,Web 应用程序攻击是一种日益严重的网络安全威胁。 在2022 年全球网络攻击增加38%,估计 46%的网站 在应用程序级别存在安全漏洞。 因此,您的网站很可能容易受到这种类型的攻击,这就

    2024年02月10日
    浏览(64)
  • 什么是层叠上下文(stacking context)?它是如何形成的?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月12日
    浏览(40)
  • 什么是去中心化存储以及它是如何工作的

    正如我在上一篇文章中提到的,中心化是当今互联网的一个巨大问题。与隐私和审查相关的问题是引起关注的主要原因,但今天我们将更详细地研究去中心化存储的工作原理以及其他基于它的平台如何利用它。 传统的中心化存储一直很容易受到审查,原因是互联网目前使用中

    2024年02月11日
    浏览(45)
  • Marior去除边距和迭代内容矫正用于自然文档矫正

    本文简要介绍了论文 “ Marior: Margin Removal and Iterative Content Rectification for Document Dewarping in the Wild ” 的相关工作。照相机捕捉到的文档图像通常会出现透视和几何变形。考虑到视觉美感较差和OCR系统性能下降,对其进行纠正具有重要的价值。最近的基于学习的方法集中关注于精

    2024年02月01日
    浏览(35)
  • 揭秘HTTPS:为什么它是现代网络安全的不二选择

    随着互联网技术的迅速发展和数据安全问题的日益突出,HTTPS加密协议成为了网络安全的重要组成部分。本文旨在深入分析HTTPS协议,解释其工作原理、加密机制以及为何它在当今网络安全中扮演着不可或缺的角色。 HTTPS(全称Hyper Text Transfer Protocol Secure)是一个用于安全通信

    2024年02月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包