wu_zf1234
wu_zf1234
采纳率0%
2016-07-25 08:27 阅读 1.1k

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条回答 默认 最新

  • bdmh bdmh 2016-07-25 08:33

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

    点赞 1 评论 复制链接分享
  • tinone_zjl 赵金龙_Tinlone 2016-07-25 08:49

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

    点赞 评论 复制链接分享
  • YapingGe2014 rage_angel 2016-07-25 08:59
        @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,

    点赞 评论 复制链接分享
  • z740446504 挨踢小伙 2016-07-25 10:20

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

    点赞 评论 复制链接分享

相关推荐