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     }

 

转载于:https://www.cnblogs.com/liuwt365/p/4079420.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值