开发技术-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>{…...
别再用老方法了!手把手教你用Coilcraft在线工具搞定BUCK电感选型(附避坑指南)
别再用老方法了!手把手教你用Coilcraft在线工具搞定BUCK电感选型(附避坑指南) 在电源设计领域,BUCK电路因其高效、稳定的特性成为工程师们的首选方案。然而,电感选型这个看似简单的环节却让不少资深工程师栽过跟头——…...
保姆级教程:在华为2288H V5服务器上搞定Ubuntu 18.04系统安装与RAID 5配置
华为2288H V5服务器Ubuntu 18.04系统安装与RAID 5配置全流程指南 对于刚接触企业级服务器的运维新手来说,华为2288H V5这类高端服务器的初始配置往往令人望而生畏。不同于普通PC的即插即用,服务器配置涉及RAID阵列构建、远程管理工具使用、操作系统定制…...
从Windows CFG到Linux Kernel CFI:手把手教你理解现代操作系统的控制流防护
从Windows CFG到Linux Kernel CFI:现代操作系统控制流防护实战指南 在系统安全领域,控制流劫持攻击始终是最具破坏力的威胁之一。想象一下,攻击者能够像操纵木偶一样控制程序的执行流程,绕过所有安全检查直接获取系统权限——这正…...
Python通达信数据获取终极指南:5分钟快速掌握金融数据分析利器
Python通达信数据获取终极指南:5分钟快速掌握金融数据分析利器 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为金融数据分析寻找可靠的数据源而烦恼吗?Python通达信数…...
weclaude:微信集成本地Claude Code,打造私有化AI编程助手
1. 项目概述与核心价值 如果你和我一样,日常重度依赖 Claude Code 在本地终端里写代码、调试脚本,但同时又觉得每次都要切到命令行窗口输入 claude 有点割裂,尤其是在手机微信上收到同事或朋友的技术问题时,总想能直接通过微信…...
阿里全栈AI进入规模商业化回报期,企业级Agent平台“悟空”在多行业场景落地显价值
5月13日,阿里巴巴发布2026财年Q4及全年财报,显示全栈AI技术投入跨越初期培育阶段,进入正向规模商业化回报周期。旗下企业级Agent平台“悟空”已逐步规模化放量。AI突破与“悟空”登场财年第四季度,阿里AI在模型、云基础设施和应用…...
为什么你的会议纪要正在训练AI?NotebookLM文档处理链路深度逆向(含网络抓包实证)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM隐私与数据安全总览 NotebookLM 是 Google 推出的基于用户自有文档构建可信 AI 助手的实验性工具,其核心设计原则之一是“数据不出域”——所有上传的 PDF、TXT 或网页内容默认仅…...
在 Taotoken 模型广场中根据任务需求与预算进行模型选型的实践
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Taotoken 模型广场中根据任务需求与预算进行模型选型的实践 对于开发者而言,面对众多大模型 API,如何选…...
如何在捷云鲸论坛高效获取高质量技术解答?
# 🐳 在代码的海洋里,我找到了那艘“鲸鱼”船还记得那个凌晨三点吗?屏幕上的报错红得像血,易语言写的爬虫死活跑不通,C语言的指针指到了内存泄漏的深渊。那一刻,孤独感比服务器的风扇声还大。直到我误打误撞…...
别再用鼠标点点点了!PyCharm 2024.1 这些键盘快捷键,让你代码编辑效率翻倍
键盘流开发者的终极武器:PyCharm 2024.1快捷键深度指南 在代码编辑的世界里,真正的效率革命往往发生在指尖与键盘之间。当大多数开发者还在依赖鼠标在菜单栏间来回切换时,键盘流玩家已经用组合键完成了代码重构、导航和调试的全流程操作。PyC…...
