• 为什麽Iterator接口,只有hasNext()next()remove()方法,而没有add(E)方法 ?

    • 逻辑上来说,迭代器是一个一个去遍历集合中的元素,而当前iterator停下的地方,就是迭代到一半的地方

      • 如果当迭代到一半时调用iterator.add()方法,理论上来说,应该是要在当前这个元素E1后面新增一个元素E2,使得下次遍历此集合时,E2一定会出现在E1后面,也就是 [....E1, E2, ....]

      • 假设add()方法是以这个语意为前提的话,那麽迭代器不提供此方法是很合理的,对于有序的集合(像是ArrayList)来说,在此元素后面新增一个元素是一个很简单的事情,但是对于无序的集合(像是HashSet)来说,不能保证新插入的这个元素E2一定会在E1后面(因为还得计算HashCode),如此就违反了add()的语意了,这也就是为什麽Iterator接口不提供add()方法

    • 另一个说法是,在使用迭代器时,通常就是"遍历"的场景,这种场景下很少会去使用add()方法,因此Iterator接口没必要提供这个方法

Java - 为什麽 Iterator接口 不提供 add(E) 方法 ?相关推荐

  1. JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用

    本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...

  2. JAVA抽象类实例化对象实现接口的三种调用方法

    在笔者的学习过程中抽象类实例化对象实现接口,笔者发现了三种表示方法.第一种是要实例化接口和抽象类,再用实例化的对象调用重写的的方法,这比较繁琐:第二种是直接实例化抽象类,将抽象类进行强转成对象,因为对 ...

  3. Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin

    1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...

  4. java的iterator接口_java Iterator接口和LIstIterator接口分析_java_脚本之家

    java  Iterator接口和LIstIterator接口分析 目录 1.Iterator接口 2.ListIterator 3.Iterator和ListIterator的区别 正文 在继续看A ...

  5. JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类

    一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...

  6. es6 默认的 Iterator 接口

    默认的 Iterator 接口 Iterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环(详见下文).当使用for...of循环遍历某种数据结构时,该循环会自动 ...

  7. 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口

    文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...

  8. java private 接口_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  9. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

最新文章

  1. Linux文件权限(3)
  2. C# 3.X -- the newest features
  3. flask开发问题小记
  4. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程
  5. error: failed to push some refs to 'https://gitee.com/xxx/xxx'
  6. mac文件丢失,苹果电脑有没有好用的恢复软件?
  7. python串口操作_Python Serial串口基本操作(收发数据)
  8. python科学计算库-python 科学计算基础库安装
  9. kafka详细安装运行
  10. 2021-11-12 Capturing Car-Following Behaviors by Deep Learning
  11. Laravel 5.8 前瞻
  12. python基础-模仿醉汉在二维空间上的随机漫步
  13. RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`
  14. 基于Matlab的倍相buck降压电路仿真
  15. 计算机毕业设计Java大学生创业众筹系统(源码+系统+mysql数据库+lw文档)
  16. 基于R语言的回归分析实现
  17. fltk教程01-基础
  18. L2TP与PPTP区别
  19. 计算机老师的作文,8分作文 | 电脑能否代替老师
  20. malloc实现原理探究

热门文章

  1. 使用UltraISO(软碟通)制作U盘启动盘并安装系统
  2. fastjson转换json字符串key的首字母小写变大写的解决办法
  3. 不畏将来,不念过往,如此安好
  4. 快速学会3DMax高级建模人物骨骼蒙皮
  5. gnuplot使用简介
  6. GO语言(golang)官方网站!
  7. NNDL 实验五 前馈神经网络(2)自动梯度计算 优化问题
  8. 000001历史数据_平安银行(000001) - 历史数据 - 股票工具
  9. 旧版macOS官方下载地址
  10. 在Spyder安装xlrd插件