Iterator 怎么使用?有什么特点?
Iterator 怎么使用?有什么特点?
看一下 Iterator 接口源码中的方法
//是否有下一个元素
boolean hasNext();//下一个元素
E next();//从迭代器指向的集合中删除迭代器返回的最后一个元素
default void remove() {throw new UnsupportedOperationException("remove");
}//遍历所有元素
default void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);while (hasNext())action.accept(next());
}
使用
public class TestIterator {static List<String> list = new ArrayList<String>();static {list.add("111");list.add("222");list.add("333");}public static void main(String[] args) {testIteratorNext();System.out.println();testForEachRemaining();System.out.println();testIteratorRemove();}//使用 hasNext 和 next遍历 public static void testIteratorNext() {Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String str = iterator.next();System.out.println(str);}}//使用 Iterator 删除元素 public static void testIteratorRemove() {Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String str = iterator.next();if ("222".equals(str)) {iterator.remove();}}System.out.println(list);}//使用 forEachRemaining 遍历public static void testForEachRemaining() {final Iterator<String> iterator = list.iterator();iterator.forEachRemaining(new Consumer<String>() {public void accept(String t) {System.out.println(t);}});}
}
打印结果
111
222
333111
222
333111
333
注意事项
- 在迭代过程中调用集合的 remove(Object o) 可能会报 java.util.ConcurrentModificationException 异常
- forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常
//使用迭代器遍历元素过程中,调用集合的 remove(Object obj) 方法可能会报 java.util.ConcurrentModificationException 异常public static void testListRevome() {ArrayList<String> aList = new ArrayList<String>();aList.add("111");aList.add("333");aList.add("222");System.out.println("移除前:"+aList);Iterator<String> iterator = aList.iterator();while(iterator.hasNext()){if("222".equals(iterator.next())){aList.remove("222"); }}System.out.println("移除后:"+aList);}//JDK 1.8 Iterator forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常public static void testForEachRemainingIteRemove () {final Iterator<String> iterator = list.iterator();iterator.forEachRemaining(new Consumer<String>() {public void accept(String t) {if ("222".equals(t)) {iterator.remove();}}});}
参考:
AbstractList 迭代器实现分析
【Java面试题与答案】整理推荐
- 基础与语法
- 集合
- 网络编程
- 并发编程
- Web
- 安全
- 设计模式
- 框架
- 算法与数据结构
- 异常
- 文件解析与生成
- Linux
- MySQL
- Oracle
- Redis
- Dubbo
Iterator 怎么使用?有什么特点?相关推荐
- 184_刘发顺_Java核心编程
Java核心编程 Java 技术栈: Java基础 Java面向对象:Java 是一种面向对象的语言,它对对象中的类.对象.继承.封装.多态.接口.包等均有很好的支持.为了简单起见,Java 只支持类 ...
- 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器
目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...
- Java Iterator 使用
学而时习之,温故而知新. 迭代器是一种模式.详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的.只要拿到这个对象,使用迭代器就可以遍 ...
- Java技术——Iterator和Enumeration的不同
0. Iterator和Enumeration的不同 (1)两者的函数接口不同 Enumeration只有2个函数接口,通过Enumeration我们只能读取集合的数据,而不能对数据进行修改. Ite ...
- Rocksdb iterator 的 Forward-scan 和 Reverse-scan 的性能差异
前言 最近在读 MyRocks 存储引擎2020年的论文,因为这个存储引擎是在Rocksdb之上进行封装的,并且作为Facebook 内部MySQL的底层引擎,用来解决Innodb的空间利用率低下 和 ...
- Rocksdb Iterator实现:从DBIter 到 TwoLevelIter 的漫长链路
文章目录 1. 迭代器简单介绍 2. 迭代器用户态相关接口 3. 迭代器内部架构 4. 迭代器的入口实现 4.1 DBIter 4.2 MergingIterator 4.3 Memtable系列It ...
- Rocksdb iterator和snapshot 接口
Rocksdb提供迭代器来来访问整个db中的数据,就像STL中的迭代器功能一样,用来访问容器中的具体的数据. 访问形式以及访问接口有如下几种: 遍历所有的key-value //打开db,并初始化一个 ...
- STL模拟实现1.0 -- list和iterator模拟实现和简单分析
引言 C ++ 标准模本库<STL>中有很多优秀的代码实现,不然怎么能叫做C++标准模板库呢,其中一个实现就是有一个容器,叫做list.所谓容器其实就是存储相同类型数据的一个存储集合,li ...
- ArrayList Iterator remove java.lang.UnsupportedOperationException
在使用Arrays.asList()后调用add,remove这些method时出现 java.lang.UnsupportedOperationException异常.这是由于Arrays.asLi ...
- C++/C++11中头文件iterator的使用
<iterator>是C++标准程序库中的一个头文件,定义了C++ STL标准中的一些迭代器模板类,这些类都是以std::iterator为基类派生出来的.迭代器提供对集合(容器)元素的操 ...
最新文章
- Web开发(一)·期末不挂之第四章·CSS语法基础(CSS选择器选择器优先级各类样式表的使用方法)
- Cheese 模拟,贪心(300)
- Angularjs Controller 间通信机制
- android开发之图表
- 【竞赛方案】2020腾讯广告算法大赛:高分进阶
- boost::hana::duplicate用法的测试程序
- php判断字符串中是否包含某字符串
- Arcgis10安装说明
- 【转】sharepoint foundation 2013升级sp1补丁后无法使用搜索功能
- python顺序结构代码_Python代码结构——顺序、分支、循环
- jenkins java版本_安装jenkins几个版本貌似都有问题
- 4、Firefox 中安装Fiddler插件
- Unity手游开发与实战
- DropDownList 实现分页不包含选择值
- 124 并发编程小结
- 动手写简单的音乐推荐系统
- JavaScript学习指南 (来自转载)
- CANAPE字体颜色c语言,CANape介绍.doc
- Qt游戏编程——飞机大战
- 怎么拆分PDF文档?一分钟学会拆分PDF文档的方法