8.2.2 使用Java8增强的Iterator遍历集合元素
Iterator
接口也是Java
集合框架的成员,但它与Collection
系列、Map
系列的集合不一样:
Collection
系列集合、Map
系列集合主要用于盛装其他对象,Iterator
对象也被称为迭代器,Iterator
主要用于遍历(即迭代访问)Collection
集合中的元素。
Iterator
接口隐藏了各种Collection
实现类的底层细节,向应用程序提供了遍历Collection
集合元素的统一编程接口。
Iterator接口方法
Iterator
接口里定义了如下4个方法
方法 | 描述 | ||
---|---|---|---|
boolean hasNext() |
如果被迭代的集合元素还没有被遍历完,则返回true |
||
Object next() |
返回集合里的下一个元素 | ||
void remove() |
删除集合里上一次next 方法返回的元素 |
||
void forEachRemaining(Consumer action) |
这是Java 8 为Iterator 新增的默认方法,该方法可使用Lambda 表达式来遍历集合元素 |
||
## 程序示例 ## | |||
下面程序示范了通过Iterator 接口来遍历集合元素。 |
|||
|
运行效果:
1 |
疯狂Android讲义 |
Iterator仅用于遍历集合
从上面代 大专栏 8.2.2 使用Java8增强的Iterator遍历集合元素码中可以看出, Iterator
仅用于遍历集合, Iterator
本身并不提供盛装对象的能力。如果需要创建Iterator
对象,则必须有一个被迭代的集合。
Iterator必须依附于Collection对象
Iterator
必须依附于Collection
对象,若有一个Iterator
对象,则必然有一个与之关联的Collection
对象。 Iterator
提供了两个方法来迭代访问Collection
集合里的元素,并可通过remove()
方法来删除集合中上一次next()
方法返回的集合元素。
修改迭代变量的值对集合元素本身没有任何影响
当使用Iterator
对集合元素进行迭代时, Iterator
并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。
Iterator迭代时不可通过 其他方式 Collection集合里的元素
当使用Iterator
迭代访问Collection
集合元素时:
- 不可以通过
集合对象
修改Collection
集合里的元素,例如:不能通过集合对象添加元素,也不能通过集合对象添加元素。 - 如果要删除元素,只有通过
Iterator
对象的的remove
方法才可以删除next()
方法返回的集合元素. - 否则将会引发
java.util.ConcurrentModificationException
异常。
程序示例
下面程序示范了这一点。
1 |
import java.util.*; public class IteratorErrorTest { |
运行效果:
1 |
1 |
上面程序中collection.remove(book);
这行代码位于Iterator
迭代块内,也就是在Iterator
迭代Collection
集合过程中修改了Collection
集合,所以程序将在运行时引发异常。
Iterator
迭代器采用的是快速失败(fail-fast
)机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中的其他线程修改),程序立即引发ConcurrentModificationException
异常,而不是显示修改后的结果,这样可以避免共享资源而引发的潜在问题。
8.2.2 使用Java8增强的Iterator遍历集合元素的更多相关文章
- java8 增强的Iterator遍历集合元素
Iterator接口也是Java集合框架的成员,与Collection和Map两个系列的集合不一样的是Collection和Map系列主要用于充当容器的作用,而Iterator正如其名字一样是主要用于 ...
- 迭代器:遍历集合元素的操作. iterator()
package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; / ...
- Java SE之For增强与Iterator遍历器提取数据(附Map.Entry)
增强for循环: 1.操作数组 2.操作List集合 3.操作Map集合 1.map.values()法 2.map.keySet()法 [传统方法] 3.Map.Entry法 ...
- 增强for循环遍历集合或数组
遍历:for循环遍历数组或集合:iterator迭代器遍历集合:还有增强for循环(for each)遍历数组或集合: 遍历数组: 遍历集合:
- 使用增强for循环遍历集合的时候操作集合的问题?
// 遍历一个list public static void printList(List<String> list){ for (String string : list) { list ...
- 集合—collection、iterator遍历集合
一.collection接口 1.collection常用方法 点击查看代码 @Test public void test(){ //contains() Collection coll = new ...
- iterator取集合元素
1,完整代码 //创建两个arraylist对象 Collection al = new ArrayList(); //al1添加元素 al.add("name1"); al.ad ...
- java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);
java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...
- java集合(3)-Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...
随机推荐
- p2p gossip 结构化 非结构化
p2p P2P中文名字叫对等网络,网络中节点地位一致. QQ其实不算P2P,因为QQ利用了中央服务器. Hbase这样的分布式系统,因为有Hmaster节点,也不算是P2P网络: cas ...
- Cannot read property 'XXXX' of null/undifined
这个问题可能的原因有很多 1.如果你的js直接写在自执行函数或者head标签内的script里面,那么可以检查一下你的代码有没有用到页面里的节点,因为这样写的代码在页面加载完成之前就会开始执行,如果有 ...
- PHP系列 | ThinkPHP5.1 如何自动加载第三方SDK(非composer包 )
注意:这里只是针对于非Composer 安装包的自动加载的实现,能用composer安装的自动跳过. 由于ThinkPHP5.1 严格遵循PSR-4规范,不再建议手动导入类库文件,所以新版取消了Loa ...
- Prometheus监控系统之入门篇(一)
1. 简介 Prometheus: (简称Prom)是由SoundCloud开发的开源监控报警系统.是大名鼎鼎的CNCF云原生基金会下的第二大开源项目.具有如下特点: 使用Go语言开发 内置时序数据库 ...
- 把cifar数据转换为图片
参考 https://gist.github.com/fzliu/64821d31816bce595a4bbd98588b37f5 """ make_cifar10.py ...
- shell手册
摘自雪松同学 0说明{ # shell实例手册最新下载地址: http://hi.baidu.com/quanzhou722/item/f4a4f3c9eb37f02d46d5c0d9 # pytho ...
- xib下如何修改frame
1.取消xib下Use Auto Layout 2.xcode->product->clean
- spark docker java kubernetes 获取cpu内核/线程数问题
升级服务从spark2.3.0-hadoop2.8 至 spark2.4.0 hadoop3.0 一日后导致spark streaming kafka消费数据积压 服务不是传统的部署在yarn上,而是 ...
- iOS之input file调用相册控制器消失跳转到登陆页
最近在做一个app要用到H5,其中有一个需求是要点击H5的的控件弹出系统相册,通过在H5的input file 中定义<input type="file" class=&qu ...
- The website is API(1)
Requests 自动爬取HTML页面 自动网路请求提交 robots 网络爬虫排除标准 Beautiful Soup 解析HTML页面 实战 Re 正则表达式详解提取页面关键信息 Scrapy*框架 ...