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     }

时间: 2024-08-18 11:11:29

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

iOS关于使用for in循环删除数组元素报错

原文链接: iOS关于使用for in循环删除数组元素报错 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

list循环删除单个元素

JAVA中循环删除list中元素的方法总结 JAVA中循环遍历list有三种方式for循环.增强for循环(也就是常说的foreach循环).iterator遍历. 1.for循环遍历list for(int i=0;i<list.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素.比如当你删

for循环删除集合陷阱

首先看下面的代码: import java.util.LinkedList;import java.util.List; public class DeleteCollection {        public static void main(String[] args) {        List<String> list = new LinkedList<String>();        list.add("a");        list.add(&

循环删除list中多个元素

错误的做法: for(int i= 0;i<list.size();i--){ for(int j= 0; j<list2.size();j++){ if(list.get(i).contains(list2.get(j))){ list.remove(i); } } } 结果:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 因为在你删除元素的同事list.size()在变小,这

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

go语言从零学起(三)--list循环删除元素(转载)

本篇系转载 在使用go的container/list的package时,你可能会无意间踩一个小坑,那就是list的循环删除元素. list删除元素,直观写下来的代码如下: package main import ( "container/list" "fmt" ) func main() { //初始化一个list l := list.New() l.PushBack(1) l.PushBack(2) l.PushBack(3) l.PushBack(4) fmt.

JS实现循环删除数组中元素的方法介绍

这篇文章主要给大家介绍了关于Javascript循环删除数组中元素的几种方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面来看看详细的介绍: 发现问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的需求.按照常规的思路,直接一个for循环,然后在循环里面来个if判断,在判断中删除掉指定元素即可.但是实际情况往往不会像预想的那样顺利

Remove Element(删除重复元素,循环删除2个及2个以上元素)

Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the new length. 时间复杂度O(n),空间复杂度O(1).解题思路,主要就是双指针的思想,一个为游标遍历,一个为新数组的最后一个元素

Java循环删除集合多个元素的正确打开方式

首先说下不正确的打开方式: 第一:使用for循环删除集合的元素,示例代码如下 1 ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d")); 2 for (int i = 0; i < list.size(); i++) { 3 list.remove(i); 4 } 5 System.out