zoukankan      html  css  js  c++  java
  • for循环删除list元素陷阱

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

     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,代码如下:

    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处理

     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     }

  • 相关阅读:
    js中||与&&的用法
    JVM内存模型及配置参数
    Jmeter进行webSocket接口测试
    解决oracle 物化视图刷新失败
    JAVA处理链表经典问题
    openLdap安装教程
    LDAP基本概念
    深度学习正则化---dropout补充
    深度学习正则化---dropout
    深度学习正则化---集成
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4079420.html
Copyright © 2011-2022 走看看