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

 List<String> list=new ArrayList<String>();
list.add("123");
list.add("234");
list.add("134");
list.add("657");
list.add("198");
list.add("654");
for (int i = 0; i < list.size(); i++)
{
String str=list.get(i);
if(str.contains("1"))
{
//list.remove(i);
list.remove(str);
} }
System.out.println(list);

运行结果

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

List<String> list=new ArrayList<String>();
list.add("123");
list.add("2314");
list.add("134");
list.add("657");
list.add("198");
list.add("654");
for (int i = 0; i < list.size(); i++)
{
String str=list.get(i);
if(str.contains("1"))
{
//list.remove(i);
list.remove(str);
} }
System.out.println(list); }

运行结果:

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

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

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

 List<String> list=new ArrayList<String>();
list.add("123");
list.add("2314");
list.add("134");
list.add("657");
list.add("198");
list.add("654");
for (int i = 0; i < list.size(); i++)
{
String str=list.get(i);
if(str.contains("1"))
{
//list.remove(i);
list.remove(str);
i--;
} }
System.out.println(list); }

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. nginx_笔记分享_php-fpm详解

    参考 http://syre.blogbus.com/logs/20092011.htmlhttp://www.mike.org.cn/articles/what-is-cgi-fastcgi-php ...

  2. Google地图

    Google地图开发总结 我们经常使用地图查位置.看公交.看街景,同时地图还开放第三方的API给开发者.利用这些API进行地图的个性化的展示和控制,例如北京被水淹了,开发一个网页显示北京被淹的地图,地 ...

  3. 如何给网页标题栏上添加图标(favicon.ico)

    favicon.ico详解:     favicon是Favorites Icon的缩写,favicon.ico是指显示在浏览器收藏夹.地址栏和标签标题前面的个性化图标. 设置步骤: 1. 把做好的f ...

  4. window.onscroll

    http://www.w3help.org/zh-cn/causes/SD9013 1.各浏览器对 document.document.body.document.documentElement 对象 ...

  5. 51单片机C51毫秒级(ms)精确延时

    如下程序能实现ms毫秒级的比较精确的延时 void Delayms(unsigned int n) { unsigned int i,j; ;j--) ;i>;i--); } 用keil可以看出 ...

  6. WebAPI 用户认证防篡改实现HMAC(二)签名验证 AbsBaseAuthenticationAttribute--转

    public class ActionFilter : ActionFilterAttribute      {          public override void OnActionExecu ...

  7. spring读取properties文件

    1.方式一 <util:properties id="meta" location="classpath:config/metainfo.properties&qu ...

  8. C#系列教程——switch定义及使用

    代码如下: using System; class Switch_Test { static void Main() { Console.WriteLine("box sizes: 1=Sm ...

  9. Storm drpc学习

    示例代码: package com.lky.test; import org.apache.commons.logging.Log; import org.apache.commons.logging ...

  10. JAXB--学习2

    一.Jaxb处理java对象和xml之间转换常用的annotation有: @XmlType @XmlElement @XmlRootElement @XmlAttribute @XmlAccesso ...