Java代码ArrayList删除其中值的问题,请看下面的代码有问题么?

//删除集合中的偶数数据
List arr = new ArrayList();
for(int i = 0; i < 20; i++){
arr.add(i);
}

    for(int i = 0; i <arr.size() ; i++){
        if(arr.get(i)%2==0){
            arr.remove(i);
        }
    }
    for(int i = 0; i < arr.size(); i++){
        System.out.print(arr.get(i)+" ");
    }

以上的代码是否有问题?是不是出了越界的异常?应该改成这样么?
List arr = new ArrayList();
for(int i = 0; i < 20; i++){
arr.add(i);
}

    for(int i = 0; i <arr.size() ; i++){
        if(arr.get(i)%2==0){
            arr.remove(i);
            i--;                //加上这一句是否就没问题了?
        }
    }
    for(int i = 0; i < arr.size(); i++){
        System.out.print(arr.get(i)+" ");
    }

4个回答

删除,不要重头往后遍历,要从后往前遍历

qq_28003739
世界和平e 我以前就是用i--的,听你这么一说,还挺有道理!
接近 4 年之前 回复

尽量不要在List遍历的同时操作List元素,因为list.size()在变化,推荐使用迭代器操作数据

tinone_zjl
赵金龙_Tinlone 或者使用另一个集合保存从这个集合中get(i=奇数)的数据
接近 4 年之前 回复
    @Test
public void deleteEven() {
    List<Integer> arr = new ArrayList<Integer>();
    System.out.println("删除前数组:");
    for (int i = 0; i < 20; i++) {
        arr.add(i);
        System.out.print(i + ",");
    }
    System.out.println();

    for (int i = 0; i < arr.size(); i++) {
        if (arr.get(i) % 2 == 0) {
            arr.remove(i);
        }
    }
    System.out.println("删除后数组:");
    for (int i = 0; i < arr.size(); i++) {
        System.out.print(arr.get(i) + ",");
    }
}

删除前数组:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
删除后数组:
1,3,5,7,9,11,13,15,17,19,

list下标问题,remove后下标会后移 如果不减1的话 会下标越界。 可以看看list的基础知识

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问