Java - 为什麽 Iterator接口 不提供 add(E) 方法 ?
为什麽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) 方法 ?相关推荐
- JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用
本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...
- JAVA抽象类实例化对象实现接口的三种调用方法
在笔者的学习过程中抽象类实例化对象实现接口,笔者发现了三种表示方法.第一种是要实例化接口和抽象类,再用实例化的对象调用重写的的方法,这比较繁琐:第二种是直接实例化抽象类,将抽象类进行强转成对象,因为对 ...
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin
1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...
- java的iterator接口_java Iterator接口和LIstIterator接口分析_java_脚本之家
java Iterator接口和LIstIterator接口分析 目录 1.Iterator接口 2.ListIterator 3.Iterator和ListIterator的区别 正文 在继续看A ...
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...
- es6 默认的 Iterator 接口
默认的 Iterator 接口 Iterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环(详见下文).当使用for...of循环遍历某种数据结构时,该循环会自动 ...
- 十三、Java高级特性 Lambda表达式 | 接口组成更新 | 方法引用 | 函数式接口
文章目录 十三.Java高级特性 1.Lambda表达式 1.1体验Lambda表达式[理解] 1.2Lambda表达式的标准格式[理解] 1.3Lambda表达式练习1[应用] 1.4Lambda表 ...
- java private 接口_java接口中 定义 private 私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
- Java私有方法解释_java接口中 定义 private 私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
最新文章
- Linux文件权限(3)
- C# 3.X -- the newest features
- flask开发问题小记
- .NET开发框架(五)-IIS上部署ASP.NET Core项目教程
- error: failed to push some refs to 'https://gitee.com/xxx/xxx'
- mac文件丢失,苹果电脑有没有好用的恢复软件?
- python串口操作_Python Serial串口基本操作(收发数据)
- python科学计算库-python 科学计算基础库安装
- kafka详细安装运行
- 2021-11-12 Capturing Car-Following Behaviors by Deep Learning
- Laravel 5.8 前瞻
- python基础-模仿醉汉在二维空间上的随机漫步
- RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`
- 基于Matlab的倍相buck降压电路仿真
- 计算机毕业设计Java大学生创业众筹系统(源码+系统+mysql数据库+lw文档)
- 基于R语言的回归分析实现
- fltk教程01-基础
- L2TP与PPTP区别
- 计算机老师的作文,8分作文 | 电脑能否代替老师
- malloc实现原理探究