List中移除指定元素
例一:
想在list中删除元素,先看下面的这一段代码:
public class App2 {public static void main( String[] args ){List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("cc");list.add("dd");for(int i=0;i<list.size();i++) {if("bb".equals(list.get(i))) {list.remove(i);}}for(String s:list) {System.out.println(s);}}
}
运行结果如下所示,看起来没啥问题,再看下面的例子。
例二:
此时,list中有多个重复的元素,我们还是用原来的方法进行去重,如下所示:
public class App2 {public static void main( String[] args ){List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("bb");list.add("cc");list.add("dd");list.add("bb");for(int i=0;i<list.size();i++) {if("bb".equals(list.get(i))) {list.remove(i);}}for(String s:list) {System.out.println(s);}}
}
运行结果如下所示,貌似出了个小问题,因为有个bb并没有去除掉。
原因:
为什么会出现这种问题呢?当删除第一个bb元素后,下一个元素就会向前移一位 , 而for循环的索引是继续往后加1的,即没删除之前list.get(2)='bb',当删除第一个“bb”后,下一个元素前移,导致此时list.get(1)='bb',list.get(2)='cc',而for循环里面的i并没有发生变化,还是继续执行+1向后遍历的操作,导致“bb”元素逃脱了并没有删除。
解决方式一:
只需要在发生删除元素的时候,将索引里面的i向前移位即可,即元素发生前移的同时,也让索引发生前移,即i--,如下代码所示:
public class App2 {public static void main( String[] args ){List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("bb");list.add("cc");list.add("dd");list.add("bb");for(int i=0;i<list.size();i++) {if("bb".equals(list.get(i))) {list.remove(i);i--;}}for(String s:list) {System.out.println(s);}}
}
输出结果如下所示:
解决方式二:
使用倒序遍历list,如下所示:
public class App2 {public static void main( String[] args ){List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("bb");list.add("cc");list.add("dd");list.add("bb");for(int i=list.size()-1;i>=0;i--) {if("bb".equals(list.get(i))) {list.remove(i);}}for(String s:list) {System.out.println(s);}}
}
输出结果如下:
解决方式三:
使用迭代器Iterator来进行元素操作(官方推荐),代码如下所示:
public class App2 {public static void main( String[] args ){List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("bb");list.add("cc");list.add("dd");list.add("bb");Iterator<String> it = list.iterator();while(it.hasNext()) {if("bb".equals(it.next())) {it.remove();}}for(String s:list) {System.out.println(s);}}
}
输出结果如下所示:
解决方式四:
使用java8的lambda表达式,使用lambda表达式的方法更为优雅,这里使用了List接口所继承的Collection接口在JDK 1.8新增的removeIf方法,该方法接收一个Predicate类型的参数,删除列表中满足Predicate条件的元素。
public class App2 {public static void main( String[] args ){List<String> list = new ArrayList<String>();list.add("aa");list.add("bb");list.add("bb");list.add("cc");list.add("dd");list.add("bb");list.removeIf(e ->"bb".equals(e));for(String s:list) {System.out.println(s);}}
}
输出结果如下:
List中移除指定元素相关推荐
- java list移除所有元素,从List中移除指定 List 中包含的其所有元素(可选操作)。...
从List中移除指定 List 中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀 于是我就写了如下代码: class="jav ...
- java list移除符合条件的元素_从List中移除指定 List 中包含的其所有元素(可选操作)。...
从List中移除指定 List 中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀 于是我就写了如下代码: List l = ...; L ...
- js 数组移除指定元素【函数封装】(含对象数组移除指定元素)
普通数组移除指定元素 // 普通数组移除指定元素 function removeItem(arr, item) {let targetIndex = arr.findIndex((itemTemp) ...
- java中map删除指定元素_Map中根据条件删除元素
今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map processM ...
- list集合移除指定元素
场景:使用for循环删除集合中的指定元素 定义一个list集合,并添加数据: List<String> list=new ArrayList<>();list.add(&quo ...
- div中移除某个元素 js_[JS基础] 13 - 其他 JS 基础
持续补充 1. 浏览器 DOM事件机制? addeventlistener(event, callback) 事件冒泡: 事件委托的原理 <ul><li>..... 事件绑定到 ...
- 116.移除指定元素 removeSpecifyElement
文章目录 题目描述 解题思路 代码详解 运行截图 题目描述 题目链接 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外 ...
- JQuery移除指定元素
几个前端使用的移除元素的方法,可能这些方法还有别的作用,但是这里只说他们清空的作用: remove() - 删除被选元素(及其子元素和注释---被选元素及其内部所有的内容) empty() - 从被选 ...
- JQuery移除指定元素内容
remove() 删除被选元素及内部所有内容(包括注释及子元素) empty() 删除被选元素的子元素 html(" ") 删除被选元素的子元素 empty() 和 html(&q ...
最新文章
- 绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!
- 大数据-平台-解决方案-基础架构一览
- 计算机视觉领域不同的方向:目标识别、目标检测、语义分割等
- python expect模块_PYTHON基础语法全面总结
- 详解JavaScript之神奇的Object.defineProperty
- ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试
- 请教大家:如何把.DCU文件反编译回源代码?谢谢。
- MySQL索引、事物
- 【有趣】Python之禅
- Smith Numbers POJ - 1142 (暴力+分治)
- ap_invoice_distributions_all到xla_ae_lines
- ETL增量单表同步简述_根据dateTime增量
- 张宇1000题高等数学 第十、十一、十二章 一元函数积分学的应用——几何应用、积分等式与积分不等式、物理应用
- html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...
- 程序员修炼之道(第2版)
- 网管必用的10款软件系统
- JMETER性能测试
- 如何鉴别虚拟主机好坏
- 《笑谈反病毒和病毒技术》
- 苹果也被撕下遮羞布,iPhone14后继乏力,靠十三香维持销量