关于从集合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

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的