迭代器
来源:互联网 发布:淘宝免单微信群2017 编辑:程序博客网 时间:2024/05/29 14:48
迭代器
1、什么是迭代器?
跌代:顺序替换,一个接着一个替换。
java中的迭代器是一个对象,提供一种遍历集合的方式并不暴露集合内部细节。
迭代的目的就是为了使用,允许用户每次获得和使用集合中的一个元素。
迭代器模式:
迭代器角色;具体迭代角色
容器角色 具体容器角色
集合本身就可以通过数据结构来遍历,为什么还要迭代器呢?
因为遍历的过程要用到数据结构,所以为了不暴露数据结构,数据的底层实现原理。
Iterator 迭代对象
Iterable 迭代接口 集合实现 可以用itertor()方法返回一个迭代对象。
定义和遍历元素的接口,内部类。
2、迭代器有什么用?
将遍历序列的操作与序列底层的结构分离,解耦合。
单一职责:集合的职责有两个:存储数据,交互数据。
将遍历聚合对象中的数据的行为提取出来,封装到迭代器中。
3、迭代器如何使用?
for each while 两种方式 用iterator()方法获得迭代对象
4、如何实现迭代器
内部维护一个游标
内部类 size 和modCount current 游标的方式来实现next hasNext remove方法
都会先判断 modCount,如果在使用迭代器时改变集合将产生并发修改异常。
checkForModification 迭代器检查其修改计数,以确保与创建它的集合修改一致。
这就是快速失败。失败产生异常,快速,集合改变。fair-fast
5、迭代器使用注意事项
(1)不能有两个next
(2)不能调用集合的方法会产生并发修改异常
(3)ListIterator 双向遍历 有add set()还有向前的方法
(4)forEach不能调用集合的方法,也不能通过迭代对象调用remove()
for each不能用到改变size的方法,for each本质就是调用迭代器
可以改用while和Iterator相结合的方法。
ArrayList使用size来维护集合的状态,而Iterator用current来维护。
当size发生变化时,current并不一定能过立即得到同步除非这种变化是Iterator主动导致的。
因为Iteraotr会调用集合中的增删方法,所以会改变size。
快速迭代失败会跑出并发修改异常。ConcurrenModificationExceprion
(5)不能假设迭代器访问元素的顺序,除非显示声明。
如果底层集合不是由迭代器本身主动进行修改的,fair-fast模式将快速而清晰地发生失败。
在后继的操作中,迭代器会通知集合的修改计数size,确保该值不会修改。
如果修改将抛出ConcurrentModificationException
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 迭代器
- 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- samba共享服务:共享目录基本设定、匿名用户、访问控制、读写控制、多用户挂载
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛(完结)
- node.js与gulp与es6
- Oracle数据库安装配置问题小结
- 迭代器
- git命令回顾(待完成)
- JavaWEB基础之Servlet
- LeetCode 9.Palindrome Number2
- PAT 1001 A+B Format 简洁代码的思考
- leetCode:Generate Parentheses
- 如何访问WEB-INF下面的jsp文件
- Python3.x爬虫下载网页图片
- 守护线程