Java迭代器Iterator的remove()方法
2023-09-11 14:16:37 时间
遍历Java集合(Arraylist,HashSet...)的元素时,可以采用Iterator迭代器来操作
Iterator接口有三个函数,分别是hasNext(),next(),remove()。
今天浅谈remove函数的作用
官方解释为:
Removes from the underlying collection the last element returned by this iterator (optional operation).
This method can be called only once per call to next().
The behavior of an iterator is unspecified if the underlying collection is modified while the iteration is in progress in any way other than by calling this method.
译:从底层集合中移除此迭代器返回的最后一个元素(可选操作)。 每次调用next()时,只能调用此方法一次。 如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为。
官方说法现在先不研究
举个例子1:在使用迭代器遍历集合的过程中,使用集合对象的remove方法删除数据时,查看迭代器的运行情况。
List<String> all = new ArrayList<String>(); all.add("a"); all.add("b"); all.add("c"); Iterator<String> iterator=all.iterator();//实例化迭代器 while(iterator.hasNext()){ String str=iterator.next();//读取当前集合数据元素 if("b".equals(str)){ all.remove(str); }else{ System.out.println( str+" "); } } System.out.println("\n删除\"b\"之后的集合当中的数据为:"+all);
输出结果为:
发现:使用集合对象 all 的 remove() 方法后,迭代器的结构被破坏了,遍历停止了。
---------------------------------------------------------------------------------------------------
举个例子2:在使用迭代器遍历集合的过程中,使用迭代器的 remove 方法删除数据时,查看迭代器的运行情况
List<String> all = new ArrayList<String>(); all.add("a"); all.add("b"); all.add("c"); Iterator<String> iterator = all.iterator();//实例化迭代器 while(iterator.hasNext()){ String str=iterator.next();//读取当前集合数据元素 if("b".equals(str)){ //all.remove(str);//使用集合当中的remove方法对当前迭代器当中的数据元素值进行删除操作(注:此操作将会破坏整个迭代器结构)使得迭代器在接下来将不会起作用 iterator.remove(); }else{ System.out.println( str+" "); } } System.out.println("\n删除\"b\"之后的集合当中的数据为:"+all);
运行结果
发现:使用迭代器 的 remove() 方法后,迭代器删除了当前读取的元素 “b”,并且继续往下遍历元素,达到了在删除元素时不破坏遍历的目的。
原文链接:https://blog.csdn.net/qq_30310607/article/details/82347807
相关文章
- 新建maven指定jdk版本-eclipse新建maven项目报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path的解决方案
- java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”
- Android手机打造你的Python&Java开发工具!
- jmeter 的java请求代码在main方法里面执行
- java 调用webservice的各种方法总结
- Java实现 LeetCode 563 二叉树的坡度(又是一个遍历树)
- Java实现 LeetCode 551 学生出勤记录 I(暴力大法好)
- Java实现 LeetCode 324 摆动排序 II
- Java实现 蓝桥杯VIP 算法训练 黑色星期五
- Java实现 蓝桥杯VIP 算法训练 新生舞会
- 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
- java 11 增加了一系列的字符串处理方法,Optional 加强 ,改进的文件API
- Json解析异常处理方式(JSONException: Value of type java.lang.String cannot be converted to JSONObject)
- 【Java】java使用反射访问对象方法和成员变量
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
- paip.java 注解的详细使用代码
- java 线程方法join的简单总结
- 华为OD机试 - 静态扫描(Java & JS & Python)
- 【JDK】Java语言中URL和URLConnection类的介绍及其相关方法
- Android的kotlin的报错提示:java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
- 蓝桥杯2012省赛——尾号评分(Java实现)
- JAVA---jdk1.8之后的接口(接口中定义默认方法和静态方法,私有方法)
- Effective java读书札记第一条之 考虑用静态工厂方法取代构造器
- Java: Hadoop文件系统的读写操作
- Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository.config.BootstrapMode
- Java的RMI远程方法调用实现和应用
- 算法 《霍纳的方法java实践》
- Java List /ArrayList 三种遍历方法
- Java 集合框架
- 基于Java+SpringBoot+Vue前后端分离小区管理系统设计与实现
- 【Java类与对象】类的构造方法、静态变量常量、类的主方法、