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

Collection集合遍历的三种方法

1.foreach循环遍历

格式:for(元素的数据类型 变量名:数组或集合){

}

2.使用迭代器遍历

方法名称:Iterator<E> iterator()

说明:返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素。

示例:

List<String> list = new ArrayList<>();list.add("王");list.add("小");list.add("王");list.add("小");Iterator iterator = list.iterator();while (iterator.hasNext()){System.out.print(iterator.next());}

迭代器初始在集合的第一个元素,while循环判断条件为当前元素是否为空,打印时的.next()是将索引遍历到下一个元素。

3.Lambda表达式

方法名称:default void forEach(Consumer<? super T> action)  

说明:结合lambda遍历集合

 Set<String> set = new HashSet<>();set.add("王");set.add("小");set.add("王");set.add("小");//用Lambda表达式遍历setset.forEach (new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});

4.认识并发修改异常问题

遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象称为并发修改异常问题。

图中通过for循环删除包含枸杞的元素,但是没有删除干净,就是发生了并发修改异常问题

原因是,当for循环中的索引i在第一个元素时,该元素不包含枸杞,i++,索引遍历至第二个元素,第二个元素包含枸杞,删除,i++,索引遍历至第三个元素,但此时红枸杞元素会因黑枸杞的删除而前移,至第二个元素,所以红枸杞未判断,没有删除。

解决并发修改异常问题的方案
① 如果集合支持索引,可以使用for循环遍历,每删除数据后做i--;或者可以倒着遍历
②)可以使用迭代器遍历,并用迭代器提供的删除方法删除数据。

注意:增强for循环/Lambda遍历均不能解决并发修改异常问题,因此增它们只适合做数据的遍历,不适合同时做增删操作,

http://www.xdnf.cn/news/8711.html

相关文章:

  • multiprocessing多进程使用案例
  • 用神经网络对信贷项目进行预测
  • java三种常见设计模式,工厂、策略、责任链
  • 原生php单元测试
  • bun全栈开发尝鲜:用bun-react-template实现Markdown文章展示
  • removeIf() 方法,结合 Lambda 表达式
  • 鸿蒙仓颉开发语言实战教程:页面跳转和传参
  • WORD 转 PDF 工具:排版 / 图片 / 表格批量转换提升办公效率
  • Acrobat 中 JavaScript 为 PDF 带来的交互
  • 篇章二 数据结构——前置知识(二)
  • C# 正则表达式
  • c/c++的opencv伽马噪声
  • ArrayList 与 LinkedList 区别?
  • 【c++11】智能指针 -- 摆脱内存困扰,现代编程的智能选择
  • OSCP备战-mr-robot靶机详细解法
  • conda 环境中opencv 报错
  • Maven Profile高级策略与冲突解决
  • 手眼标定:九点标定、十二点标定、OpenCV 手眼标定
  • Cursor最新问题不能使用Claude3.7问题的解决方案
  • [Linux]如何配置mailutils郵件服務?
  • 基于STM32的电容电阻测量仪Proteus仿真设计+程序设计+设计报告+讲解视频
  • MyBatis实战指南(三)MyBatis常用配置详解(XML配置,环境配置,类型别名,属性与映射器)
  • 【监控】Prometheus+Grafana 构建可视化监控
  • JVM 的垃圾回收器
  • 每日算法刷题计划Day15 5.25:leetcode不定长滑动窗口求子数组个数越短越合法3道题,用时1h
  • BUUCTF——RCE ME
  • 【数据结构】实现方式、应用场景与优缺点的系统总结
  • CAN通信收发测试(USB2CAN模块测试实验)
  • RocketMq的消息类型及代码案例
  • 复杂度讲解