当前位置: 首页 > news >正文

illegalstateexception是什么异常_Java面试题Iterator怎么使用?有什么特点?

点击上方“千锋Java学院”,选择“置顶公众号

每天一道面试模拟真题及解析

课前导读

●回复"每日一练"获取以前的题目,持续更新!

●我希望大家积极参与!有什么不懂可以加小千微信进行讨论

★把面试准备工作,拆分、融入到平时每天

Iterator怎么使用?有什么特点?

参考答案:

Iterator 接口源码中的方法
  • java.lang.Iterable 接口被 java.util.Collection 接口继承,java.util.Collection 接口的 iterator() 方法返回一个 Iterator 对象
  • next() 方法获得集合中的下一个元素
  • hasNext() 检查集合中是否还有元素
  • remove() 方法将迭代器新返回的元素删除
  • forEachRemaining(Consumer super E> action) 方法,遍历所有元素
  JDK 1.8 源码如下:
//是否有下一个元素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());}
Iterator 的使用示例:
public class TestIterator {  static List list = new ArrayList();  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 iterator = list.iterator();    while (iterator.hasNext()) {      String str = iterator.next();      System.out.println(str);    }  }  //使用 Iterator 删除元素   public static void testIteratorRemove() {    Iterator 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 iterator = list.iterator();    iterator.forEachRemaining(new Consumer() {      public void accept(String t) {        System.out.println(t);      }    });  }}

注意事项

  • 在迭代过程中调用集合的 remove(Object o) 可能会报 java.util.ConcurrentModificationException 异常

  • forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常

//使用迭代器遍历元素过程中,调用集合的 remove(Object obj) 方法可能会报 java.util.ConcurrentModificationException 异常  public static void testListRevome() {     ArrayList aList = new ArrayList();         aList.add("111");         aList.add("333");         aList.add("222");         System.out.println("移除前:"+aList);                  Iterator 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 iterator = list.iterator();    iterator.forEachRemaining(new Consumer() {       public void accept(String t) {        if ("222".equals(t)) {          iterator.remove();        }      }    });  }
db0a82ba19c1e58b80a28d53754a79da.png ▼ 点击 阅读原文 抢预约免费试听课程名额

相关文章:

  • 部门预算进行时
  • altium 去掉部分铺铜_【干货】一文读懂铜再生分类与工艺
  • Symbian OS编码诀窍之编码诀窍
  • python set函数是什么意思_python中set是什么意思
  • 博客时代
  • python3命令需要使用命令行开发者工具_Python创建命令行应用的工具 tools for command line application in python...
  • 使用 IBM Rational Portfolio Manager 进行业务驱动开发入门简介
  • sql count用法_SQL知识大全(二):SQL的基础知识你都掌握了吗?
  • ruby,java的劲敌
  • python123查找指定字符_Python语法速查:字符串格式简单处理、子串查找与判断方法?...
  • python xlwt模块使用_(转)Python中xlrd和xlwt模块使用方法
  • Ruby创造的奇迹
  • python远程调用摄像头_Python调用摄像头
  • python将图片转化成字符图片_一百行python代码将图片转成字符画
  • 专访:Ruby能否成为第二个Java
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Consul Config 使用Git做版本控制的实现
  • C语言笔记(第一章:C语言编程)
  • Hibernate最全面试题
  • iOS 颜色设置看我就够了
  • Javascript Math对象和Date对象常用方法详解
  • Linux链接文件
  • PAT A1050
  • Xmanager 远程桌面 CentOS 7
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序填坑清单
  • 详解移动APP与web APP的区别
  • 项目管理碎碎念系列之一:干系人管理
  • 7行Python代码的人脸识别
  • Java总结 - String - 这篇请使劲喷我
  • ​比特币大跌的 2 个原因
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #每日一题合集#牛客JZ23-JZ33
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (C++17) optional的使用
  • (二)Linux——Linux常用指令
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (未解决)macOS matplotlib 中文是方框
  • (状压dp)uva 10817 Headmaster's Headache
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • :O)修改linux硬件时间
  • @RequestBody的使用
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [docker] Docker容器服务更新与发现之consul