首页 > 编程语言 >[Java基础]集合的删除操作

[Java基础]集合的删除操作

时间:2024-09-18 18:35:03浏览次数:10  
标签:Java 删除 List list remove util add 集合

在 Java 中,直接在遍历集合时删除元素会引发 ConcurrentModificationException,因为集合的结构在迭代过程中发生了变化。为了避免这种问题,可以使用 IteratorListIterator 来进行安全删除。下面介绍几种常见的方式。

1. 使用 Iterator 进行删除

使用 Iterator 是在遍历集合时删除元素的推荐方法。Iterator 提供了 remove() 方法,可以安全地删除当前遍历到的元素。

示例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            if (fruit.equals("banana")) {
                iterator.remove();  // 使用迭代器的 remove 方法删除元素
            }
        }

        System.out.println(list);  // 输出: [apple, orange]
    }
}

在这个例子中,iterator.remove() 方法用于安全地删除当前元素 banana

2. 使用 ListIterator (仅限于 List 集合)

ListIteratorIterator 的增强版本,适用于 List 集合。除了 remove(),它还支持 add()set() 等操作,可以向前和向后遍历集合。

示例:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");

        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String fruit = listIterator.next();
            if (fruit.equals("banana")) {
                listIterator.remove();  // 使用 ListIterator 的 remove 方法删除元素
            }
        }

        System.out.println(list);  // 输出: [apple, orange]
    }
}

3. 使用 removeIf() 方法(Java 8+)

在 Java 8 及以上版本中,可以使用 removeIf() 方法结合 Lambda 表达式,简洁地删除符合条件的元素。

示例:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("orange");

        // 删除等于 "banana" 的元素
        list.removeIf(fruit -> fruit.equals("banana"));

        System.out.println(list);  // 输出: [apple, orange]
    }
}

removeIf() 方法会根据提供的条件判断是否删除元素,这种方法相对简单明了,适合在条件筛选的场景下使用。


总结:

  • Iteratorremove() 方法:适用于所有集合类型。
  • ListIteratorremove() 方法:适用于 List 类型的集合,可以双向遍历。
  • removeIf() 方法:Java 8 引入,适用于更简洁的条件删除操作。

这几种方式能够有效避免遍历时直接修改集合结构导致的 ConcurrentModificationException

标签:Java,删除,List,list,remove,util,add,集合
From: https://www.cnblogs.com/DCFV/p/18419093

相关文章

  • 基于springboot的就业信息管理系统。Javaee项目,springboot项目。
    演示视频:基于springboot的就业信息管理系统。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Maven来实现,前端采用了layui框架。MySQL数据库作为系统数据储存平台,采用JDBC技术进行数据库连接,实现了基......
  • 基于SSM的抗疫物资管理系统(数据库表结构文档)。Javaee项目。
    演示视频基于SSM的抗疫物资管理系统(数据库表结构文档)。Javaee项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Jsp+Bootstrap来实现。MySQL数据库作为系统数据储存平台,采用JDBC技术进行数据库连接,实现了基于B/S结构的Web系......
  • 基于SSM的美妆商城网站(有报告)。Javaee项目。
    演示视频:基于SSM的美妆商城网站(有报告)。Javaee项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringMvc+Mybatis+Jsp+Vue+layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。系统设计思想一个成......
  • Java JNA、JNI、ProcessBuilder、Runtime.getRuntime.exec()详解
    Java提供了几种方式与非Java代码进行交互(比如调用本地库或执行外部程序),其中包括JNA、JNI、ProcessBuilder和Runtime.getRuntime().exec()。下面是对每种方式的详细解释。1.JNA(JavaNativeAccess)简介JNA是Java与本地代码进行交互的一种高层次API,它允许Java......
  • java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not fo
    一、概述在AndroidStudio中集成opencv,使用其native函数时报的一个错误 二、解决办法opencv提供的native文件夹中提供的是动态库但是在gradle中的配置中,配置的stl是静态的,将其改为shared就行了externalNativeBuild{cmake{cp......
  • 使用Python计算多个集合的交集详解
    集合(Set)是Python中的一种常用数据结构,专门用于存储不重复的元素。在数据处理中,集合操作常被用来处理去重、并集、交集等问题。尤其在处理多个数据集时,交集操作尤为重要,因为它可以帮助我们找到多个集合中都存在的共同元素。本文将详细探讨如何在Python中高效地进行多个集合的交集操......
  • VUE 分组取最大,生成子集合
    //分组函数 constgroupByAge=(docs:TOSDepositoryDTO[]):Record<number,TOSDepositoryDTO[]>=>{ returndocs.reduce((acc,d)=>{  if(!acc[d.approvalId])acc[d.approvalId]=[];  acc[d.approvalId].push(d);  returnacc; },{}asR......
  • 准备好了吗?JAVA从业AI开发的学习路线详解
    作为一个拥有扎实Java基础的人,想要涉足人工智能(AI)应用开发,你已经在编程能力方面打下了很好的基础。Java是一种通用的、强类型的语言,非常适合于开发高性能的应用程序,尤其是在后端服务和大规模分布式系统方面。AI领域是一个高度跨学科的领域,涵盖了机器学习、深度学习、数据科学、......
  • 【他山之石】优化 JavaScript 的乐趣与价值(下)
    前言继本文的上篇发表之后,没想到反响还挺好,看来大家在JS优化的问题上越来越注重“与国际接轨”了。一起来看本文的下篇,也是干货满满。文章目录6.AvoidlargeobjectsWhattheeffshouldIdoaboutthis?7.Useeval8.Usestrings,carefullyWhattheeffs......
  • 期末所需分数.java
    原始问题描述期末考试满分100分,平时成绩满分40分。总评成绩由期末考成绩的60%和平时成绩组成。已知平时成绩,求期末考试至少需得多少分,以确保总评成绩不低于60分。原始版本参考代码importjava.util.Scanner;publicclassFishTank{publicstaticvoidmain(String[]ar......