场景:使用for循环删除集合中的指定元素

定义一个list集合,并添加数据:

List<String> list=new ArrayList<>();list.add("b");list.add("e")list.add("b");list.add("c");

需求:删除该集合中所有字符串为b的数据,代码如下:

for (int i = 0; i < list.size(); i++) {if("b".equals(list.get(i))) {list.remove(i);}}

运行结果如下图:

我们可以看到删除成功,看起来没有问题,下面我们更改一下集合中元素的顺序:

List<String> list=new ArrayList<>();list.add("b");list.add("b");list.add("e");list.add("c");

再次运行,运行结果如下:

奇怪的事情发生了,当删除相邻重复元素的时候只删除一个,这是什么原因呢?

ArrayList的底层结构是数组类型,数组这种数据结构的特点是删除其中某个元素时,后面的所有元素索引都会前移,此时for循环的指针却会下移,因此会略过下一个元素,解决方案是删除时将指针回调一次:

for (int i = 0; i < list.size(); i++) {if("b".equals(list.get(i))) {list.remove(i);i--;}}

此时运行才会得到想要的结果。

备注:这个问题只会出现在使用for进行遍历的时候,使用迭代器来操作时,不会出现这种问题:

Iterator it=list.iterator();while(it.hasNext()) {if("b".equals(it.next())) {it.remove();}}

运行正常。

list集合移除指定元素相关推荐

  1. Python 集合06 discard()方法—删除集合中的指定元素

    discard()方法-删除集合中的指定元素 文章目录 discard()方法-删除集合中的指定元素 1.语法要点 2.实操练习 (1)删除的元素在集合中 (2)删除集合中不存在的元素,discard ...

  2. 从List集合中删除指定元素

    从List集合中删除指定元素的几种方式 最近在使用这个操作的时候搜索了一下网上的文章,发现有些能用有些不能用, 由于使用之前没有做详细的测试,导致程序bug,今天抽空做了一下总结和测试. packag ...

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

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

  4. Java中删除集合中的指定元素

    引出问题 当我们从集合中找出某个元素并删除的时候可能出现一种并发修改异常问题. 哪些遍历存在问题? a.迭代器遍历集合且直接用集合删除元素的时候可能出现. b.增强for循环遍历集合且直接用集合删除元 ...

  5. Java集合移除某个元素

    目录 一.fori移除 二.加强for 三.Iterator 四.JDK8写法 一.fori移除 public static void main(String[] args) {test1();}pr ...

  6. 116.移除指定元素 removeSpecifyElement

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

  7. list清空的函数java,6-1 jmu-Java-05集合-List中指定元素的删除 (20分)

    编写如下两个函数java /以空格(单个或多个)为分隔符,将line中的元素抽取出来,放入一个List/ public static List convertStringToList(String l ...

  8. JQuery移除指定元素

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

  9. JQuery移除指定元素内容

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

最新文章

  1. 支付宝支付成功之后的接口_支付宝放支付大招,花呗借呗之后又来一“呗”,快告诉家人吧!...
  2. 仿vue的前端自定义cmd命令拉取项目脚手架
  3. html中如何把两行合并单元格,怎么把Excel单元格中多行文字合并为一行(2)
  4. symfony api 错误响应_Postman for Mac(API管理开发软件)
  5. mdb java_Java生成mdb文件(MS Access文件)
  6. 【高校宿舍管理系统】终章 完成主页以及项目总结
  7. 详解MessageBox(),MsgBox函数的正确使用
  8. mybatis 之 parameterType=list
  9. HTML实用的网页代码大全
  10. MongoVue 破解治标不治本
  11. 无人机航摄地面站航线设计主要参数
  12. 前端面试,面试官会问些啥...
  13. Android版本自带游戏,植物大战僵尸自带花园版
  14. iOS m3u8本地缓存播放(控制下载并发、暂停恢复)
  15. IL2CPP 构建大小优化
  16. 苹果全球开发者大会推出智能音箱网友吐槽Siri“掉链子”
  17. nginx部署前端项目的详细步骤
  18. MAC修改本地域名与 ip 的绑定
  19. 第四代计算机相关资料,当前的计算机一般被认为是第四代计算机,它所采用的逻辑元件是...
  20. window.onload

热门文章

  1. 超级简单thinkphp微信小程序服务商分账。以及小程序普通支付,微信特约商户
  2. 无人机集群的分布式协作 VI-SLAM
  3. alicode git push rejected 的解决
  4. 模拟集成电路设计的九个层次-顶尖高手的心得体会
  5. 怎么让热图显示基因名_OmicShare Tools - 基迪奥生物信息绘图云平台
  6. c语言魔除,菜鸟学编程(C语言版)
  7. Composer开启多线程组件改变composer缓慢问题
  8. 设计模式-创建型模式:原型模式PrototypeModel
  9. PowerSyncKM 包尔星克 对拷线无法自动链接windows和统信系统
  10. 人工智能(Artificial Intelligence)浅谈,填补你的人工智能空白