例一:

想在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);}}
}

输出结果如下所示:

解决方式四:

使用java8lambda表达式,使用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中移除指定元素相关推荐

  1. java list移除所有元素,从List中移除指定 List 中包含的其所有元素(可选操作)。...

    从List中移除指定 List 中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀 于是我就写了如下代码: class="jav ...

  2. java list移除符合条件的元素_从List中移除指定 List 中包含的其所有元素(可选操作)。...

    从List中移除指定 List 中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀 于是我就写了如下代码: List l = ...; L ...

  3. js 数组移除指定元素【函数封装】(含对象数组移除指定元素)

    普通数组移除指定元素 // 普通数组移除指定元素 function removeItem(arr, item) {let targetIndex = arr.findIndex((itemTemp) ...

  4. java中map删除指定元素_Map中根据条件删除元素

    今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map processM ...

  5. list集合移除指定元素

    场景:使用for循环删除集合中的指定元素 定义一个list集合,并添加数据: List<String> list=new ArrayList<>();list.add(&quo ...

  6. div中移除某个元素 js_[JS基础] 13 - 其他 JS 基础

    持续补充 1. 浏览器 DOM事件机制? addeventlistener(event, callback) 事件冒泡: 事件委托的原理 <ul><li>..... 事件绑定到 ...

  7. 116.移除指定元素 removeSpecifyElement

    文章目录 题目描述 解题思路 代码详解 运行截图 题目描述 题目链接 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外 ...

  8. JQuery移除指定元素

    几个前端使用的移除元素的方法,可能这些方法还有别的作用,但是这里只说他们清空的作用: remove() - 删除被选元素(及其子元素和注释---被选元素及其内部所有的内容) empty() - 从被选 ...

  9. JQuery移除指定元素内容

    remove() 删除被选元素及内部所有内容(包括注释及子元素) empty() 删除被选元素的子元素 html(" ") 删除被选元素的子元素 empty() 和 html(&q ...

最新文章

  1. 绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!
  2. 大数据-平台-解决方案-基础架构一览
  3. 计算机视觉领域不同的方向:目标识别、目标检测、语义分割等
  4. python expect模块_PYTHON基础语法全面总结
  5. 详解JavaScript之神奇的Object.defineProperty
  6. ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试
  7. 请教大家:如何把.DCU文件反编译回源代码?谢谢。
  8. MySQL索引、事物
  9. 【有趣】Python之禅
  10. Smith Numbers POJ - 1142 (暴力+分治)
  11. ap_invoice_distributions_all到xla_ae_lines
  12. ETL增量单表同步简述_根据dateTime增量
  13. 张宇1000题高等数学 第十、十一、十二章 一元函数积分学的应用——几何应用、积分等式与积分不等式、物理应用
  14. html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...
  15. 程序员修炼之道(第2版)
  16. 网管必用的10款软件系统
  17. JMETER性能测试
  18. 如何鉴别虚拟主机好坏
  19. 《笑谈反病毒和病毒技术》
  20. 苹果也被撕下遮羞布,iPhone14后继乏力,靠十三香维持销量

热门文章

  1. 【旧文集】越读者读书笔记-记于2015
  2. 求职者说:成功应聘华为后的总结
  3. js layui跳转页面_Layer.js提示层弹窗结束之后自动跳转到新页面的效果
  4. Layui中列表(金额或数字)动态数据如何添加千位分隔符
  5. C++基础教学(含程序样例)
  6. 定了!官方宣布:阿里系95亿美元全资收购饿了么
  7. SpringBoot集成ES+京东搜索
  8. 前端线上图片生成马赛克
  9. 你的信用卡最低还款额是多少?
  10. Maya动画导入UE4相关的细节问题及解决方案