开发技术-Java集合(List)删除元素的几种方式
文章目录
- 1. 错误的删除
- 2. 正确的方法
- 2.1 倒叙删除
- 2.2 迭代器删除
- 2.3 removeAll() 删除
- 2.4 removeIf() 最简单的删除
- 3. 总结
1. 错误的删除
在写代码时,想将其中的一个元素删除,就遍历了 list ,使用了 remove(),发现效果并不是想要的。
List<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");list.add("abc");list.add("abd");System.out.println("原list:" + JSON.toJSONString(list));List<String> list2 = new ArrayList<>();list2.addAll(list);List<String> list3 = new ArrayList<>();list3.addAll(list);List<String> list4 = new ArrayList<>();list4.addAll(list);List<String> list5 = new ArrayList<>();list5.addAll(list);// 有问题的删除for (int i = 0; i < list.size(); i++) {if (list.get(i).startsWith("a")) {list.remove(i);}}System.out.println("过滤后list:" + JSON.toJSONString(list));
输出:
原list:["aa","bb","cc","abc","abd"]
过滤后list:["bb","cc","abd"]
元素 abd 并没有过滤出去,这是因为,使用 remove() 后,导致 list 的长度发生了改变,后续遍历时,abd 的下标取不到了。
2. 正确的方法
2.1 倒叙删除
既然顺序遍历会有问题,那么倒叙遍历会怎么样呢
// 倒叙删除for (int i = list2.size() - 1; i >= 0; i--) {if (list2.get(i).startsWith("a")) {list2.remove(i);}}
输出:
原list2:["aa","bb","cc","abc","abd"]
过滤后list2:["bb","cc"]
达到预期。
2.2 迭代器删除
当然了,常用的还有迭代器删除
// 迭代器删除Iterator<String> iterator3 = list3.iterator();while (iterator3.hasNext()) {if (iterator3.next().startsWith("a")) {iterator3.remove();}}
2.3 removeAll() 删除
创建一个删除集合,然后 removeAll
// 组装删除集合后删除List<String> delList = new ArrayList<>();for (int i = 0; i < list4.size(); i++) {if (list4.get(i).startsWith("a")) {delList.add(list4.get(i));}}list4.removeAll(delList);
2.4 removeIf() 最简单的删除
// 最简单的删除,JDK8及以上list5.removeIf(l -> l.startsWith("a"));
3. 总结
对 List 集合进行删除时,可使用迭代器,最简单的是使用 List 集合的 removeIf()
全部代码如下:
/*** @Author: caimeng01* @CreateTime: 2024/2/28 17:50* @Description: TODO(一句话描述该类的功能)*/
package list;import com.alibaba.fastjson.JSON;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class T2 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");list.add("abc");list.add("abd");System.out.println("原list:" + JSON.toJSONString(list));List<String> list2 = new ArrayList<>();list2.addAll(list);List<String> list3 = new ArrayList<>();list3.addAll(list);List<String> list4 = new ArrayList<>();list4.addAll(list);List<String> list5 = new ArrayList<>();list5.addAll(list);// 有问题的删除for (int i = 0; i < list.size(); i++) {if (list.get(i).startsWith("a")) {list.remove(i);}}System.out.println("过滤后list:" + JSON.toJSONString(list));System.out.println("-------------------------");System.out.println("原list2:" + JSON.toJSONString(list2));// 倒叙删除for (int i = list2.size() - 1; i >= 0; i--) {if (list2.get(i).startsWith("a")) {list2.remove(i);}}System.out.println("过滤后list2:" + JSON.toJSONString(list2));System.out.println("-------------------------");System.out.println("原list3:" + JSON.toJSONString(list3));// 迭代器删除Iterator<String> iterator3 = list3.iterator();while (iterator3.hasNext()) {if (iterator3.next().startsWith("a")) {iterator3.remove();}}System.out.println("过滤后list3:" + JSON.toJSONString(list3));System.out.println("-------------------------");System.out.println("原list4:" + JSON.toJSONString(list4));// 组装删除集合后删除List<String> delList = new ArrayList<>();for (int i = 0; i < list4.size(); i++) {if (list4.get(i).startsWith("a")) {delList.add(list4.get(i));}}list4.removeAll(delList);System.out.println("过滤后list4:" + JSON.toJSONString(list4));System.out.println("-------------------------");System.out.println("原list5:" + JSON.toJSONString(list5));// 最简单的删除,JDK8及以上list5.removeIf(l -> l.startsWith("a"));System.out.println("过滤后list5:" + JSON.toJSONString(list5));}
}
输出:
原list:["aa","bb","cc","abc","abd"]
过滤后list:["bb","cc","abd"]
-------------------------
原list2:["aa","bb","cc","abc","abd"]
过滤后list2:["bb","cc"]
-------------------------
原list3:["aa","bb","cc","abc","abd"]
过滤后list3:["bb","cc"]
-------------------------
原list4:["aa","bb","cc","abc","abd"]
过滤后list4:["bb","cc"]
-------------------------
原list5:["aa","bb","cc","abc","abd"]
过滤后list5:["bb","cc"]

(图网,侵删)
相关文章:
开发技术-Java集合(List)删除元素的几种方式
文章目录 1. 错误的删除2. 正确的方法2.1 倒叙删除2.2 迭代器删除2.3 removeAll() 删除2.4 removeIf() 最简单的删除 3. 总结 1. 错误的删除 在写代码时,想将其中的一个元素删除,就遍历了 list ,使用了 remove(),发现效果并不是想…...
c++ 递归
递归函数是指在函数定义中调用自身的函数。C语言也支持递归函数。 下面是一个使用递归函数计算阶乘的例子: #include <iostream> using namespace std;int factorial(int n) {// 基本情况,当 n 等于 0 或 1 时,阶乘为 1if (n 0 || n…...
RedHat9 | podman容器
1、容器技术介绍 传统问题 应用程序和依赖需要一起安装在物理主机或虚拟机上的操作系统应用程序版本比当前操作系统安装的版本更低或更新两个应用程序可能需要某一软件的不同版本,彼此版本之间不兼容 解决方式 将应用程序打包并部署为容器容器是与系统的其他部分…...
边缘计算项目有哪些
边缘计算项目在多个领域得到了广泛的应用,以下是一些典型的边缘计算项目案例: 1. **智能交通系统**:通过在交通信号灯、监控摄像头等设备上部署边缘计算,可以实时分析交通流量,优化交通信号控制,减少拥堵&…...
计算fibonacci数列每一项时所需的递归调用次数
斐波那契数列是一个经典的数列,其中每一项是前两项的和,定义为: [ F(n) F(n-1) F(n-2) ] 其中,( F(0) 0 ) 和 ( F(1) 1 )。 对于计算斐波那契数列的第 ( n ) 项,如果使用简单的递归方法,其时间复杂度是…...
【教学类65-05】20240627秘密花园涂色书(中四班练习)
【教学类65-03】20240622秘密花园涂色书03(通义万相)(A4横版1张,一大 68张纸136份)-CSDN博客 背景需求: 打印以下几款秘密花园样式(每款10份)给中四班孩子玩一下,看看效果 【教学类…...
Python 学习之基础语法(一)
Python的语法基础主要包括以下几个方面,下面将逐一进行分点表示和归纳: 一、基本语法 1. 注释 a. 单行注释:使用#开头,例如# 这是一个单行注释。 b. 多行注释:使用三引号(可以是三个单引号或三个双引号&…...
日志分析-windows系统日志分析
日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆,查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下,Security.evtx即为W…...
【ARM】MDK工程切换高版本的编译器后出现error A1137E报错
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决工程从Compiler 5切换到Compiler 6进行编译时出现一些非语法问题上的报错。 2、 问题场景 对于一些使用Compiler 5进行编译的工程,要切换到Compiler 6进行编译的时候,原本无任何报错警告…...
深入 SSH:解锁本地转发、远程转发和动态转发的潜力
文章目录 前言一、解锁内部服务:SSH 本地转发1.1 什么是 SSH 本地转发1.2 本地转发应用场景 二、打开外部访问大门:SSH 远程转发2.1 什么是 SSH 远程转发2.2 远程转发应用场景 三、动态转发:SSH 让你拥有自己的 VPN3.1 什么是 SSH 动态转发3.…...
python如何把一个函数的返回值,当成这个函数的参数值
python如何把一个函数的返回值,当成这个函数的参数值 1. 递归调用 递归是一种函数自己调用自己的方法。在递归调用中,你可以将前一次调用的返回值作为下一次调用的参数。 def recursive_function(x):# 函数逻辑if 条件满足:return 结果else:return rec…...
【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用
随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…...
SpringBoot: Eureka入门
1. IP列表 公司发展到一定的规模之后,应用拆分是无可避免的。假设我们有2个服务(服务A、服务B),如果服务A要调用服务B,我们能怎么做呢?最简单的方法是让服务A配置服务B的所有节点的IP,在服务A内部做负载均衡调用服务B…...
Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等
简介 TypeScript 是 JavaScript 的超集,是 JavaScript(弱类型语言) 的强类型版本。 拥有类型机制文件后缀 .tsTypescript type ES6TypeScript 和 JavaScript 的关系类似 less 和 css 的关系TypeScript对 JavaScript 添加了一些扩展&#x…...
智慧校园-实训管理系统总体概述
智慧校园实训管理系统,专为满足高等教育与职业教育的特定需求而设计,它代表了实训课程管理领域的一次数字化飞跃。此系统旨在通过革新实训的组织结构、执行流程及评估标准,来增强学生的实践操作技能和教师的授课效率,为社会输送具…...
如何用GPT开发一个基于 GPT 的应用?
原文发自博客:GPT应用开发小记 如何开发一个基于 GPT 的应用?答案就在问题里,那就是用 GPT 来开发基于 GPT 的应用。本文以笔者的一个开源项目 myGPTReader 为例,分享我是如何基于 GPT 去开发这个系统的,这个系统的功能…...
大数据生态体系中各组件的区别面试题(更新)
一、MapReduce与Spark有什么区别? 1、处理方式: MapReduce基于磁盘处理数据,将中间结果保存到磁盘中,减少了内存占用,计算速度慢。 基于内存处理数据,将计算的中间结果保存到内存中,计算速度快。2、资源申请方式&…...
数字信号处理实验一(离散信号及离散系统的MATLAB编程实现)
实验要求: 离散信号及离散系统的MATLAB编程实现(2学时) 要求: 编写一程序,输出一定长度(点数),具有一定幅度、(角)频率和初始相位的实(或复&…...
数字图像处理专栏——introduction
Introduction: 数字图像处理技术是我在深入学习研究的方向之一。本科期间跟随导师做基于AndroidOpenCV的病虫识别app,因此入门,我也对该部分知识有进一步探索的欲望,但更多的是因该脚踏实地一步步记录,一步步成长。 本篇从数字图…...
Django 模版继承
1,设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
