List去重问题

错误例子:

        List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(1);
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);

        for(int i=0;i<list.size();i++){
            for(int j=0;j<list.size();j++){
                if(i<j){
                    if(list.get(i).equals(list.get(j))){
                        list.remove(j);
                    }
                }
            }
        }
        System.out.println(list);
    }

输出结果

[1, 1, 1, 2, 3]
[1, 1, 2, 3]

应修改为

        List<Integer> list=new ArrayList<Integer>();
        list.add(1);
        list.add(1);
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);

        for(int i=0;i<list.size();i++){
            for(int j=0;j<list.size();j++){
                if(i<j){
                    if(list.get(i).equals(list.get(j))){
                        list.remove(j);
                        j--;
                    }
                }
            }
        }
        System.out.println(list);
    }

输出结果

[1, 1, 1, 2, 3]
[1, 2, 3]

原因:

List的remove方法执行后,会立即改变List内容,被删除元素后面的元素前移。

猜你喜欢

转载自blog.csdn.net/qq_36025975/article/details/80546831