开发技术-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>{…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
