首先我们先看一段代码,如下:

  1. List<String> list=new ArrayList<String>();
  2. list.add("123");
  3. list.add("234");
  4. list.add("134");
  5. list.add("657");
  6. list.add("198");
  7. list.add("654");
  8. for (int i = 0; i < list.size(); i++)
  9. {
  10. String str=list.get(i);
  11. if(str.contains("1"))
  12. {
  13. //list.remove(i);
  14. list.remove(str);
  15. }
  16.  
  17. }
  18. System.out.println(list);

运行结果

结果也是对的,我们现在修改一下list中元素中的值,把第2个元素中加上一个1,代码如下:

  1. List<String> list=new ArrayList<String>();
  2. list.add("123");
  3. list.add("2314");
  4. list.add("134");
  5. list.add("657");
  6. list.add("198");
  7. list.add("654");
  8. for (int i = 0; i < list.size(); i++)
  9. {
  10. String str=list.get(i);
  11. if(str.contains("1"))
  12. {
  13. //list.remove(i);
  14. list.remove(str);
  15. }
  16.  
  17. }
  18. System.out.println(list);
  19.  
  20. }

运行结果:

结果不是我们所期望的,那么错在了哪里呢??

在for循环中,当删除第一个元素“123”之后,此时的list元素包括“2314” “134” “657” “198” “654”,再进行下一次循环时i=1,指向的str=“134”,把“2314”给跳了过去,所以不能把包含“2314”的元素删除,只是删除了 list中的元素奇数的包含1的元素

所以我们需要在删除完元素之后将i-1处理

  1. List<String> list=new ArrayList<String>();
  2. list.add("123");
  3. list.add("2314");
  4. list.add("134");
  5. list.add("657");
  6. list.add("198");
  7. list.add("654");
  8. for (int i = 0; i < list.size(); i++)
  9. {
  10. String str=list.get(i);
  11. if(str.contains("1"))
  12. {
  13. //list.remove(i);
  14. list.remove(str);
  15. i--;
  16. }
  17.  
  18. }
  19. System.out.println(list);
  20.  
  21. }

for循环删除list元素陷阱的更多相关文章

  1. python循环删除列表元素常见错误与正确方法

    python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...

  2. List 循环删除 指定元素的 方法

    使用Iterator进行循环,在删除指定元素.如果使用for 或 foreach 在删除指定下标是,list.size 会相应的缩短且下标前移,导致相邻满足条件的元素未删除 Iterator<S ...

  3. java循环删除List元素的方法总结

    1.for循环 2.迭代器 3.过渡法 import java.util.*; /** * Created by HP on 2018/8/2. */ public class Test { publ ...

  4. list循环删除单个元素

    摘自https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循环删除list中元素的方法总结 JAVA中循环遍历list有三种方式for循环.增强for循 ...

  5. foreach循环与迭代器循环 删除插入元素的区别

     (1)仅对其遍历而不修改容器大小时,只使用foreach循环 (2)需要边遍历边修改容器大小时(插入删除元素),只使用迭代器循环 import java.util.HashMap;import ja ...

  6. JS for循环删除数组元素

    $(function(){ var aa = [1,1,2,3,3,4,4,5]; alert(aa); for (var i = aa.length-1;i >= 0 ;i--) { if ( ...

  7. python循环删除列表元素留一个问题

    https://www.cnblogs.com/baihualin/p/10698651.html 引用up

  8. golang list使用 双层 循环 删除 遍历

    queue队列: import ( "container/list" "sync" ) type Queue struct { l *list.List m s ...

  9. java 在循环中删除数组元素

    在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...

随机推荐

  1. js 懒加载

    需要的js <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> < ...

  2. Project: Individual Project - Word frequency program-11061160顾泽鹏

    一.预计用时: (1)明确要求:15min: (2)文件的遍历:1h: (3)Simple mode 词频统计:0.5h: (4)extend mode 词频统计:1h: (5)对单词词频排序输出:0 ...

  3. C++学习笔记1——const

    Const 限定符 1. 等价 //const对象必须初始化//C++中const修饰的变量不能改变//C中const修饰的变量可以通过指针修改 2. ; const int j = i;//变量给常 ...

  4. hql 多表查询

    sql 单表/多表查询去除重复记录单表distinct多表group by select h from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbz ...

  5. 对比iOS网络组件:AFNetworking VS ASIHTTPRequest

    对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...

  6. 一次java程序的重构

    // com口操作类 package xyz.game; class ComOpera { public void openPort() throws Exception {...} // 打开com ...

  7. Install and use Karma

    1:安装karma y@y:~$ npm install --global karma 2:安装karma插件 y@y:~$ npm install --global karma-jasmine ka ...

  8. js只能输入数字

    $("#SeatCount, #Charge").on("keyup", function () { if (this.value.replace(/^0|\D ...

  9. Gridview中修改某列的背景色

    Gridview中状态列的值是1,某列的背景是是绿色状态字段是:archivesStatus protected void gvInfo_RowDataBound(object sender, Gri ...

  10. BZOJ3396: [Usaco2009 Jan]Total flow 水流

    3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 45  Solved: 27[Sub ...