iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java——List删除相关操作
  • 424
分享到

Java——List删除相关操作

javalist开发语言后端 2023-09-14 05:09:59 424人浏览 八月长安
摘要

目录 1.List循环删除元素 2.List删除重复元素 1.List循环删除元素 日常业务中,有时候需要我们遍历List列表,并对其中的元素进行判断并进行删除。 (1)List列表中,如果我们要循环删除元素,那么我们是不能直接遍历然后进

目录

1.List循环删除元素

2.List删除重复元素


1.List循环删除元素

日常业务中,有时候需要我们遍历List列表,并对其中的元素进行判断并进行删除。

(1)List列表中,如果我们要循环删除元素,那么我们是不能直接遍历然后进行remove的:

public class test {    public static List list = Arrays.asList("check 01","test 01","test 02","check 02","test 03");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        for (int i=0;i

 

如上,当我们循环遍历删除时,List中remove了一个元素,list的坐标也会发送改变。即当我们匹配了test01这个字符串,并删除后,test02的坐标则向前移动了一步,变成了1而不是2.而随着坐标往后走,test02将永远不会被删除。

针对以上问题,如果我们想要使用普通for循环遍历删除元素,那么我们则需要倒序删除

public class test {    public static List list = Arrays.asList("check 01","test 01","test 02","check 02","test 03");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        for (int i=nameList.size()-1;i>0;i--){            String str = nameList.get(i);            if (str.startsWith("test")){                nameList.remove(i);            }        }        System.out.println(nameList);    }}

 如上,成功删除List中的所有带test开头的字符按。

(2)那么,如果普通的for循环正常遍历不行,那么使用增强for循环又是否可以呢:

public class test {    public static List list = Arrays.asList("check 01","test 01","test 02","check 02","test 03");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        for (String name:nameList){            if (name.startsWith("test")){                nameList.remove(name);            }        }        System.out.println(nameList);    }}

上述代码会报并发修改错误:

 

 这是因为list.remove方法中,对元素进行删除主要基于fastremove方法:

上述方法中对modCount值进行了修改(该值指对list操作的次数)

而arrayList源码中,初始化时会进行进行把modCount的值赋值到expectedModCount中,进行同步:

 在进行增强for循环遍历时,会调用next方法,其中会判断是否存在下一个元素,其中包含以下方法:

该方法会对 expectedModCount和modCount进行判断。而remove方法中仅对modCount进行了增加,而没对expectedModCount进行处理,expectedModCount仅仅是ArrayList初始化时的值(即0),所以两值在进行了一次删除后,会不相等,从而抛出异常。

而由于list.forEach()底层也是基于增强for循环实现的,所以也会存在同样的问题。

(3)增强for循环不行,但是我们可以通过迭代器的方式对其进行操作:

public class test {    public static List list = Arrays.asList("check 01","test 01","test 02","check 02","test 03");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        for (Iterator iterator = nameList.iterator(); iterator.hasNext();){            String name = iterator.next();            if (name.startsWith("test")){                iterator.remove();            }        }        System.out.println(nameList);    }}

 这是因为迭代器的remove方法中对expectedModCount和modCount进行了同步,所以next方法中不会抛出异常:

 

2.List删除重复元素

(1)日常业务中,有时候需要我们遍历List列表,删除其中的重复元素,最常用的方法则是双循环判断去重:

public class test {    public static List list = Arrays.asList("check 01","check 01","test 01","check 01","test 02");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        for (int i=0; ii; j--){                if (nameList.get(j).equals(list.get(i))){                    nameList.remove(j);                }            }        }        System.out.println(nameList);    }}

(2)而更简单的方法则是利用Set集合的特性(不包含重复元素)对其进行去重:

public class test {    public static List list = Arrays.asList("check 01","check 01","test 01","check 01","test 01");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        List resultList = new ArrayList<>(new LinkedHashSet<>(nameList));        System.out.println(resultList);    }}

之所以选用LinkedHashSet而没使用HashSet则是为了保持列表的顺序性。

 (3)又或者,我们可以java8之后的新特性stream进行去重:

public class test {    public static List list = Arrays.asList("check 01","check 01","test 01","check 01","test 01");    public static void main(String[] args) {        List nameList = new ArrayList<>(list);        nameList = nameList.stream().distinct().collect(Collectors.toList());        System.out.println(nameList);    }}

来源地址:https://blog.csdn.net/tang_seven/article/details/129846609

--结束END--

本文标题: Java——List删除相关操作

本文链接: https://www.lsjlt.com/news/406775.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java——List删除相关操作
    目录 1.List循环删除元素 2.List删除重复元素 1.List循环删除元素 日常业务中,有时候需要我们遍历List列表,并对其中的元素进行判断并进行删除。 (1)List列表中,如果我们要循环删除元素,那么我们是不能直接遍历然后进...
    99+
    2023-09-14
    java list 开发语言 后端
  • java关于list集合做删除操作时的坑及解决
    目录关于list集合做删除操作时的坑解决办法对List集合的常用操作1.list中添加,获取,删除元素2.list中是否包含某个元素3.list中根据索引将元素数值改变(替换)4.l...
    99+
    2024-04-02
  • java中怎么解决list集合做删除操作时的坑
    本篇内容主要讲解“java中怎么解决list集合做删除操作时的坑”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中怎么解决list集合做删除操作时的坑”吧!关于list集合做删除操作时的坑...
    99+
    2023-06-25
  • java 中List删除实例详解
    java 中List删除实例详解1、循环删除List中的元素public static void main(String[] args) { List<String> t=new ArrayList<String&...
    99+
    2023-05-31
    java list删除 ava
  • PythonPandas删除列操作
    使用del和drop方法删除DataFrame中的列,使用drop方法一次删除多列 数据准备: import pandas as pd   data = pd.read_excel(...
    99+
    2024-04-02
  • MongoDB 用户相关操作
       在我们第一次启动MongoDB的时候,仅仅是制定了data数据目录和log日志目录,并没有指定--auth选项,也就是并不需要认证。 [root@VM-...
    99+
    2024-04-02
  • mysql删除操作其实是假删除问题
    目录mysql删除操作其实是假删除我们可以通过一个例子来验证下看看效果总结mysql删除操作其实是假删除 在 InnoDB 中,你的 delete 操作,并不会真的把数据删除,mysql 实际上只是给删除的数据...
    99+
    2023-04-12
    mysql删除 mysql删除操作 mysql假删除
  • Java中List删除元素方法总结
    文章目录 Java中List删除元素删除方式总览for循环顺序遍历删除for循环反向遍历删除使用Iterator迭代器删除使用lambda表达式删除列表元素(推荐)使用方法引用删除列表元素 ...
    99+
    2023-09-25
    java list 开发语言
  • python之线程相关操作
    1.线程: 一个进程可以有多个线程,共享一个进程的资源; 2.进程线程的区别:    进程是资源分配的最小单位,线程是程序执行的最小单位 3.python中线程模块threading, 提供的类: Thread, Lock, Rlock,...
    99+
    2023-01-30
    线程 操作 python
  • Java日期相关API的基本操作总结
    目录前言JDK8之前Date对象的使用格式化日期SimpleDateFormat类的使用JDK8之后LocalDate 、LocalTime 、LocalDateTime的使用格式化...
    99+
    2022-11-21
    Java日期API操作 Java日期API
  • 浅谈Java中Lambda表达式的相关操作
    为什么要使用Lambda? 可以对一个接口进行非常简洁的实现。 Lambda对接口的要求? 接口中定义的抽象方法有且只有一个才可以。 传统实现一个接口需要这样做: 方法一: ...
    99+
    2024-04-02
  • iptables删除命令中的相关问题
    最近在做一个V*P*N中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误。iptables: Bad rule (does a matching rule ex...
    99+
    2023-06-04
  • docker volume删除卷的操作
    prune 要使用此命令,客户端和守护程序API版本都必须至少为1.25。在客户端上使用docker version命令可以检查客户端和守护程序API版本。 docker vol...
    99+
    2024-04-02
  • redis中删除操作命令
    目录Redis 删除操作命令redis 常用操作命令redis通用命令String类型的常用命令Hash类型List类型Set类型SortedSet类型总结redis 删除操作命令 redis中,我们想要删除一个数据,可...
    99+
    2023-02-22
    redis删除操作命令 redis删除命令 redis命令
  • 【笔记】Java中for循环遍历删除操作
    在Java中,有些场景需要遍历集合中的元素,然后根据条件进行删除元素的操作。如果使用传统的for循环遍历方式来删除元素,很可能出错或发生意想不到的问题。推荐使用迭代器iterator完成 1. 推荐使用迭代器方式****删除 阿里...
    99+
    2023-08-24
    mybatis 笔记 java
  • 大数据之Kafka————java来实现kafka相关操作
    一、在java中配置pom junit junit 4.11 test org.apache.kafka kafka-clients 2.8....
    99+
    2023-09-23
    大数据 kafka java
  • Java实现二分查找树及其相关操作
    二分查找树(Binary Search Tree)的基本操作有搜索、求最大值、求最小值、求前驱、求后继、插入及删除。 对二分查找树的进行基本操作所花费的时间与树的高度成比例。例如有n...
    99+
    2024-04-02
  • python3文件操作相关模块
    os模块: os.curdir'.' os.pardir'..' os.sep #路径分隔符,不同的操作系统看到的结果不一样'/' os.linesep #换行符,不同的操作系统看到的也不一样,windox'\n' os.getc...
    99+
    2023-01-31
    模块 操作 文件
  • javascript怎么实现删除操作
    在Web应用程序中,删除数据是一个非常常见的操作。无论是删除一个记录,还是删除一个文件或目录,我们都需要一个能够安全、简单地执行这个操作的解决方案。而使用javascript语言可以实现这个功能。一、删除确认在删除之前,通常需要让用户确认他...
    99+
    2023-05-14
  • MySQL更新,删除操作分享
    目录一、更新二、删除一、更新 UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2,... WHERE 条件; 把id为12所对应的名字改为老哈: upd...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作