开发技术-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"]

在这里插入图片描述
(图网,侵删)

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

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

相关文章

CircuitBreaker断路器-Resilience4j

目录 背景分布式架构面临的问题&#xff1a;服务雪崩如何解决&#xff1f; CircuitBreakerResilience4jCircuitBreaker 服务熔断服务降级三种状态转换例子参数配置案例demo作业 BulkHead隔离特性SemaphoreBulkhead使用了信号量FixedThreadPoolBulkhead使用了有界队列和固定大小…

Opencv中RotatedRect和ellipse的角度方向

版本&#xff1a;opencv-4.7.0-windows Opencv中&#xff0c;大多数时候&#xff0c;逆时针旋转是正方向&#xff0c;但在RotatedRect和ellipse中&#xff0c;顺时针旋转是正方向。 //RotatedRect的角度参数是顺时针为正方向 RotatedRect(const Point2f& center, const Si…

OpenCV练习(2)图像校正

1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…

机器人控制系列教程之动力学建模(1)

简介 机器人动力学是对机器人机构的力和运动之间关系与平衡进行研究的学科。机器人动力学是以机器人运动为基础&#xff0c;研究在运动过程中连杆与连杆之间、连杆与工件之间力或力矩等关系。 分类&#xff1a; 根据研究方向的不同&#xff0c;机器人的动力学分析也分为正、逆…

【Qt之·类QTableWidget】

系列文章目录 文章目录 前言一、常用属性二、成员函数2.1 左上角空白区域 三、实例演示总结 前言 一、常用属性 二、成员函数 方法描述selectRow选中行removeRow移除行insertRow插入行rowCount总行数 2.1 左上角空白区域 QTableCornerButton即不属于列表头&#xff0c;也不…

标准版绑定完手机号页面不跳转问题修复

标准版在不登录的情况下&#xff0c;从商品进去下单的时候跳出来登录并绑定手机号&#xff0c;绑定完手机号页面不跳转问题 修改教程如下&#xff1a; 文件目录&#xff1a;template/uni-app/pages/users/binding_phone/index.vue 加如图内容&#xff0c;然后重新打包

分享一套基于SSM的美食推荐管理系统(源码+文档+部署)

大家好&#xff0c;今天给大家分享一套基于SSM的美食推荐管理系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMvcMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 博主介绍&#xff1a; 一名Java全栈工程师&#xff0c;专注于Jav…

3D Web轻量引擎HOOPS Web Platform赋能AEC行业数字化,高效渲染与多格式支持!

在建筑、工程和施工&#xff08;AEC&#xff09;行业&#xff0c;数字化转型和高效协作正变得越来越重要。为应对日益复杂的项目需求和不断提升的质量标准&#xff0c;AEC企业需要一种强大的工具来实现高效的3D可视化和数据管理。HOOPS Web Platform作为一款综合性3D开发平台&a…

床上用品跨境电商:拥有沃尔玛1P特权的商家享有哪些显著优势?

在全球化的背景下&#xff0c;跨境电商对床上用品行业至关重要。沃尔玛因其品牌影响力、客户资源及物流体系在跨境电商平台中脱颖而出。拥有沃尔玛1P特权的商家享有更多曝光机会和独家优惠。那么&#xff0c;这些特权商家具体有哪些优势呢? 沃尔玛1P特权商家在曝光率上具有显著…

Ubuntu 20.04安装中文输入法出错:gnome-user-docs-zh-hans安装失败

问题&#xff1a;Ubuntu20.04安装中文输入法出错&#xff1a;gnome-user-docs-zh-hans安装失败 现象&#xff1a; 打开language Support页面的时候&#xff0c;提示install依赖的文件 这个过程中会弹窗提示: The following packages have unmet dependencies:gnome-user-doc…

怎么从零到一建立一个海外仓:分步指南,7个关键步骤归纳

无论你是想从零到一建立一个海外仓&#xff0c;还是想升级现有的海外仓&#xff0c;下面的7个步骤对你都会有一些参考价值。从海外仓选址到安装必要系统&#xff0c;再到人员配置&#xff0c;在创建海外仓的时候这些细节都非常重要。 1、确定海外仓所需的空间容量 确定海外仓…

微信小程序版threejs的使用

首先是使用环境:我是使用的uniapp制作的微信小程序,当然原生的也是可以的,但是测试过很多,发现微信官方的threejs移植版本只能够导入gltf格式的模型,无法导入obj,这就有些尴尬了,为此我找了很多版本的threejs,首先是threejs-miniprogram,也就是官方的,可以直接在unia…

网络安全自学入门:(超详细)从入门到精通学习路线规划,学完即可就业

很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习&#xff0c;最终也只是会无疾而终&#xff01;黑客是一个大的概念&#xff0c;里面包含了许多方向&#xff0c;不同的方向需要学习的内容也不一样。 算上从学校开始学习&#xff0c;已经在网安这条路上走…

多商户万能DIY商城小程序源码系统 支持自营+独立部署 带完整的安装代码包以及搭建教程

系统概述 多商户万能 DIY 商城小程序源码系统是一个综合性的电商平台解决方案&#xff0c;旨在满足不同用户的多样化需求。它不仅支持自营模式&#xff0c;还为多商户入驻提供了广阔的空间&#xff0c;使平台能够汇聚各类商品和商家&#xff0c;形成一个丰富多样的商业生态。 …

GroundingDINO1.5突破开放式物体检测界限:介绍与应用

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【面试题】Spring面试题

目录 Spring Framework 中有多少个模块&#xff0c;它们分别是什么&#xff1f;Spring框架的设计目标、设计理念&#xff1f;核心是什么&#xff1f;Spring框架中都用到了哪些设计模式&#xff1f;Spring的核心机制是什么&#xff1f;什么是Spring IOC容器&#xff1f;什么是依…

使用vue + canvas绘制仪表盘

使用vue canvas绘制仪表盘 效果图&#xff1a; 父容器 <template><div class"panelBoard-page"><h1>panelBoard</h1><Demo1 :rate"rate" /></div> </template> <script setup> import { ref } from …

友思特分享 | 完美聚光:用于光刻曝光的UV-LED光引擎

导读 LED替代汞灯在紫外光源中的使用已成为大势所趋。友思特先进的 UV-LED-EXP 系统可作为OEM集成、汞灯光刻设备改造或直接定制光路设计和曝光设备&#xff0c;为紫外光源的半导体光刻曝光过程提供近乎完美的光照质量。 汞弧灯与UV LED 汞弧灯是高强度气体放电灯。简单地解释…

网上购物商城

摘 要 本论文基于Java语言设计与实现了一个网上购物商城系统。首先&#xff0c;通过对国内外网上购物商城的发展现状进行分析&#xff0c;确定了本系统的研究目的与意义。然后&#xff0c;进行了系统需求分析&#xff0c;包括可行性分析和业务需求描述&#xff0c;以及软硬件需…

鸿蒙开发系统基础能力:【@ohos.pasteboard (剪贴板)】

剪贴板 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import pasteboard from ohos.pasteboard;属性 系统能力: 以下各项对应的系统能力均为SystemCapability.MiscServices.Pasteb…