• 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     }

  • 相关阅读:
    使用Emacs:生存篇
    编程之美:平面最近点对
    SOA体系结构之基础培训教程-大纲篇
    DNS:域名系统
    IIS7中 ASP.NET授权功能如何实现对静态文件的控制
    JVM内存管理学习总结(一)
    FMX中实现PostMessage的方法
    ddd
    4部门明确软件IC产业企业所得税优惠政策
    不要过分相信虚拟机,特别是网络连接方面
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4079420.html
Copyright © 2020-2023  润新知