关于从集合List中移除元素

2024-08-22 07:38
文章标签 元素 list 集合 移除

本文主要是介绍关于从集合List中移除元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当我们想从List集合中移除某些元素的时候,一般会想到List集合中的remove方法,所以有的人会起初使用如下的方式从集合中移除元素:

 List<Integer> listInteger = new ArrayList<Integer>();listInteger.add(1);listInteger.add(2);listInteger.add(3);listInteger.add(4);System.out.println(listInteger);for(Integer i:listInteger){if(i == 1  ||  i == 3){listInteger.remove(i);}}System.out.println(listInteger);

上面的代码表示在一个listInteger集合中,添加四个元素,然后循环该集合,如果元素的值为1或者3(此处存在自动拆箱将Integer拆箱为int类型做比较)就需要移除掉该元素从集合中,但是这种做法得不到效果反而会报错,异常信息如下所示:

java.util.ConcurrentModificationExceptionat java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)at com.java.lee.ReferenceTest.main(ReferenceTest.java:39)

出现这个错误的原因是因为移除元素的方式不对,那么如何解决从List中移除元素这种问题呢?

下面给出两种解决方法:

方法一:将要移除的元素放到一个新的List集合中,然后从原有的集合中调用removeAll(Collection<?> c)方法 这样可以成功移除,示例代码如下:

 List<Integer> listInteger = new ArrayList<Integer>();listInteger.add(1);listInteger.add(2);listInteger.add(3);listInteger.add(4);System.out.println(listInteger);List<Integer> removeList = new ArrayList<Integer>();for(Integer i:listInteger){if(i == 1  ||  i == 3){//listInteger.remove(i);removeList.add(i);}}listInteger.removeAll(removeList);System.out.println(listInteger);

需要注意的是上述的removeAll方法的参数不可以为null,所以如果要使用该方法首先判断一下参数否为为removeList!=null && removeList.size()>0

运行结果如下所示:

[1, 2, 3, 4]
[2, 4]

方法二:使用Iterator来进行迭代,在该迭代中使用remove()方法,示例代码如下:

List<YmVo> list = new ArrayList<YmVo>();YmVo vo = new YmVo();vo.setYmzl("01");vo.setYmjc("1");list.add(vo);YmVo vo1 = new YmVo();vo1.setYmzl("02");vo1.setYmjc("1");list.add(vo1);for (YmVo v:list) {System.out.print(v.getYmzl()+ " ");}System.out.println();System.out.println("--------------------------------");for (Iterator<YmVo> iter = list.listIterator(); iter.hasNext(); ) {YmVo a = iter.next();if ("01".equals(a.getYmzl())) {iter.remove();}}for (YmVo v:list) {System.out.println(v.getYmzl()+ " ");}
public class YmVo {private String ymzl;private String ymjc;public String getYmzl() {return ymzl;}public void setYmzl(String ymzl) {this.ymzl = ymzl;}public String getYmjc() {return ymjc;}public void setYmjc(String ymjc) {this.ymjc = ymjc;}
}

运行结果如下:

01 02 02

上面是我关于从 List集合中移除元素的两种方法实践的总结。

在这里插入图片描述

这篇关于关于从集合List中移除元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095655

相关文章

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定