集合遍历的多种方式

目录

1.增强for

2.迭代器(在遍历的过程中需要删除元素,请使用迭代器)

3.双列集合

4.Lambda表达式(forEach方法)

1.单列集合:

2.双列集合:

4.Stream 流

5.普通for循环

6.列表迭代器

7.总结


1.增强for

注:增强for遍历集合的内部不要对集合本身做更改,如remove。

如:

for (EnergyWorkshop energyWorkshop : energyWorkshopList) {//根据车间名称查询车间信息EnergyWorkshop energyWorkshop1 = energyWorkshopMapper.selectWorkshopByWorkshopName(energyWorkshop.getWorkshopName());if(ObjectUtil.isNotNull(energyWorkshop1)){//String workshopName = energyWorkshop1.getWorkshopName();energyWorkshopList3.add(energyWorkshop1);//移除掉和数据库的数据同名称的energyWorkshopList.remove(energyWorkshop);}
}

在遍历energyWorkshopList同时对其进行修改(通过remove方法)。这是非常危险,因为在迭代过程中修改集合会导致ConcurrentModificationException(并发修改异常)。这是因为Java的迭代器在迭代开始时会记录一个快照(称为modCount),当集合被修改时,这个快照会改变。如果迭代器发现快照与它开始迭代时的快照不匹配,就会抛出ConcurrentModificationException

可以用迭代器解决!

Iterator<EnergyWorkshop> iterator = energyWorkshopList.iterator();
while (iterator.hasNext()) {EnergyWorkshop energyWorkshop = iterator.next();EnergyWorkshop energyWorkshop1 = energyWorkshopMapper.selectWorkshopByWorkshopName(energyWorkshop.getWorkshopName());if (ObjectUtil.isNotNull(energyWorkshop1)) {energyWorkshopList3.add(energyWorkshop1);iterator.remove(); //安全地删除元素}
}

2.迭代器(在遍历的过程中需要删除元素,请使用迭代器)

迭代器在遍历集合的时候是不依赖索引的。

举例:


迭代器的细节注意点:

1.报错NoSuchElementException

2.迭代器遍历完毕,指针不会复位(如果还想第二次遍历集合,则需要再次创建一个新的迭代器来遍历)

3.循环中只能用一次next方法(next()方法 和 hasNext()方法 使用的时候要一一对应)

4.迭代器遍历时,不能用集合的方法进行增加或者删除。(应该用迭代器的方法去操作)

3.双列集合

以上两种方法都是适用于单列集合,双列集合使用的话要先做一些前置操作

(提取"键"或者提取"键值对")

4.Lambda表达式(forEach方法)

1.单列集合:
list.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}
});//lambda表达式形式
list.forEach(s -> System.out.println(s));//Set集合
set.forEach( s -> System.out.println(s));

List单列集合:forEach方法的底层是普通for循环

Set单列集合:forEach方法的底层是增强for

2.双列集合:
map.forEach(new Biconsumer<String, String>() {@Overridepublic void accept(string key, string value) {System.out.println(key + "=" + value);}
});
map.forEach((key, value) -> System.out.println(key + "=" + value));

方法的底层:entrySet()方法 + 增强for + getKey() + getValue()

4.Stream 流

本质就是Lambda表达式。。。

5.普通for循环

只有 List接口下的集合 有索引,所以只有List集合能使用普通for循环去遍历

6.列表迭代器

只有List接口下的集合才可以用这种方法遍历。

举例:

获取一个列表迭代器的对象,里面的指针默认也是指向0索引的。

列表迭代器相比迭代器的特殊之处:

它额外添加了一个方法:在遍历的过程中,可以添加元素。

ListIterator<string> it = list.listIterator();
while(it.hasNext()){String str = it.next();if("bbb".equals(str)){it.add("qqq");}
}
System.out.println(list);

7.总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek在MATLAB上的部署与应用

在科技飞速发展的当下&#xff0c;人工智能与编程语言的融合不断拓展着创新边界。DeepSeek作为一款备受瞩目的大语言模型&#xff0c;其在自然语言处理领域展现出强大的能力。而MATLAB&#xff0c;作为科学计算和工程领域广泛应用的专业软件&#xff0c;拥有丰富的工具包和高效…

value_counts()和unique()

我今天发现一个很有意思的问题哈 import scanpy as sc import numpy as npX np.random.randn(10,3) adata1 sc.AnnData(X) adata1.obs["sample"] "H1" print(adata1)X np.random.randn(20,3) adata2 sc.AnnData(X) adata2.obs["sample"] &…

每日OJ_牛客_游游的字母串_枚举_C++_Java

目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述&#xff1a; 对于一个小写字母而言&#xff0c;游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻&#xff0c;b和c相邻&#xff0c;以此类推。特殊的&#xff0…

【AI深度学习基础】Pandas完全指南入门篇:数据处理的瑞士军刀 (含完整代码)

&#x1f4da; Pandas 系列文章导航 入门篇 &#x1f331;进阶篇 &#x1f680;终极篇 &#x1f30c; &#x1f4cc; 一、引言 在大数据与 AI 驱动的时代&#xff0c;数据预处理和分析是深度学习与机器学习的基石。Pandas 作为 Python 生态中最强大的数据处理库&#xff0c;以…

数字万用表的使用教程

福禄克经济型数字万用表前面板按键功能介绍示意图 1. 万用表简单介绍 万用表是一种带有整流器的、可以测量交、直流电流、电压及电阻等多种电学参量的磁电式仪表。分为数字万用表&#xff0c;钳形万用表&#xff0c; &#xff08;1&#xff09;表笔分为红、黑二只。使用时黑色…

C# IComparable<T> 使用详解

总目录 前言 在C#编程中&#xff0c;IComparable<T> 是一个非常重要的接口&#xff0c;它允许我们为自定义类型提供默认的比较逻辑。这对于实现排序、搜索和其他需要基于特定规则进行比较的操作特别有用。本文将详细介绍 IComparable<T> 的使用方法、应用场景及其…

DeepSeek使用手册分享-附PDF下载连接

本次主要分享DeepSeek从技术原理到使用技巧内容&#xff0c;这里展示一些基本内容&#xff0c;后面附上详细PDF下载链接。 DeepSeek基本介绍 DeepSeek公司和模型的基本简介&#xff0c;以及DeepSeek高性能低成本获得业界的高度认可的原因。 DeepSeek技术路线解析 DeepSeek V3…

Hugging Face 推出 FastRTC:实时语音视频应用开发变得得心应手

估值超过 40 亿美元的 AI 初创公司 Hugging Face 推出了 FastRTC&#xff0c;这是一个开源 Python 库&#xff0c;旨在消除开发者在构建实时音频和视频 AI 应用时的主要障碍。 "在 Python 中正确构建实时 WebRTC 和 Websocket 应用一直都很困难&#xff0c;"FastRTC…

for循环相关(循环的过程中对数据进行删除会踩坑)

# 错误方式&#xff0c; 有坑&#xff0c;结果不是你想要的。 user_list ["刘的话", "范德彪", "刘华强", 刘尼古拉斯赵四, "宋小宝", "刘能"] for item in user_list: if item.startswith("刘"): …

Qt显示一个hello world

一、显示思路 思路一&#xff1a;通过图形化方式&#xff0c;界面上创建出一个控件显示。 思路二&#xff1a;通过编写C代码在界面上创建控件显示。 二、思路一实现 点开 Froms 的 widget.ui&#xff0c;拖拽 label 控件&#xff0c;显示 hello world 即可。 qmake 基于 .…

复合机器人为 CNC 毛坯件上下料注入 “智能强心针”

在竞争日益激烈的 CNC 加工行业&#xff0c;如何提升生产效率、保证产品质量、实现智能化生产成为众多企业亟待解决的问题。富唯智能凭借其先进的复合机器人技术&#xff0c;成功为多家 CNC 加工企业提供了毛坯件上下料的优质解决方案&#xff0c;有效提升了生产效能&#xff0…

电商业务数据测试用例参考

1. 数据采集层测试 用例编号测试目标测试场景预期结果TC-001验证用户行为日志采集完整性模拟用户浏览、点击、加购行为Kafka Topic中日志记录数与模拟量一致TC-002验证无效数据过滤规则发送爬虫请求&#xff08;高频IP&#xff09;清洗后数据中无该IP的日志记录 2. 数据处理层…

Spring Cloud Gateway 网关的使用

在之前的学习中&#xff0c;所有的微服务接口都是对外开放的&#xff0c;这就意味着用户可以直接访问&#xff0c;为了保证对外服务的安全性&#xff0c;服务端实现的微服务接口都带有一定的权限校验机制&#xff0c;但是由于使用了微服务&#xff0c;就需要每一个服务都进行一…

webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果

前言 我们平时在前端网页修改好代码要点击刷新再去看修改的效果&#xff0c;这样比较麻烦&#xff0c;那么很多软件都提供了实时预览的功能&#xff0c;我们一边编辑代码一边可以看到效果。下面说的是webstorm。 1 Live Edit 首先我们需要在webstorm的settings里安装插件Live …

map的operator[]的实现

map的operator[]的实现 operator[]里包含插入操作&#xff0c;所以我们先看一下首先看一下map的insert函数 返回值是一个pair类型。正常的常见的insert&#xff0c;插入成功返回true&#xff0c;失败返回false 这里设计的insert不单单返回布尔值&#xff0c;而是返回一个pair…

定时器的编码器接口模式

选择编码器接口模式的方法是&#xff1a;如果计数器只在TI2的边沿计数&#xff0c;则置TIMx_SMCR寄存器中的SMS001&#xff0c;如果只在TI1边沿计数&#xff0c;则置SMS010&#xff0c;如果计数器同时在TI1和TI2边沿计数&#xff0c;则置SMS 011 明确一点&#xff0c;计数器…

Openshift配置默认调度

配置默认调度选择角色为worker的机器运行pod。 编辑scheduler oc edit schedulers.config.openshift.iospec:defaultNodeSelector: node-role.kubernetes.io/worker ## 添加这一段如果pod需要运行在非worker主机&#xff0c;需要配置pod所在的项目添加注解 openshift.io/node…

突破光学成像局限:全视野光学血管造影技术新进展

全视野光学血管造影&#xff08;FFOA&#xff09;作为一种实时、无创的成像技术&#xff0c;能够提取生物血液微循环信息&#xff0c;为深入探究生物组织的功能和病理变化提供关键数据。然而&#xff0c;传统FFOA成像方法受到光学镜头景深&#xff08;DOF&#xff09;的限制&am…

OpenHarmony 进阶——HDF 驱动框架的原理小结

文章大纲 引言一、HDF的驱动加载&#xff08;驱动安装&#xff09;方式1、动态加载&#xff08;主要是uhdf&#xff09;2、静态加载(主要是khdf)2.1、驱动入口实现2.1.1、Bind接口2.1.2、Init接口2.1.3、Release接口 2.2、HDF_INIT 驱动入口符号2.3、获取驱动列表2.4、获取设备…

大模型应用:多轮对话(prompt工程)

概述 在与大型语言模型&#xff08;如ChatGPT&#xff09;交互的过程中&#xff0c;我们常常体验到与智能助手进行连贯多轮对话的便利性。那么&#xff0c;当我们开启一个新的聊天时&#xff0c;系统是如何管理聊天上下文的呢&#xff1f; 一、初始上下文的建立 1. 创建新会…