首页 > 解决方案 > 将int 0的所有元素移到ArrayList的后面?

问题描述

我正在创建一个将 0 的所有实例移动到 ArrayList 末尾的方法,但保留其他数字的原始顺序。

public static ArrayList<Integer> 
zerosBack(ArrayList<Integer> arr)
{
    for(int i = 0; i < arr.size(); i++){
        if(arr.get(i) == 0){
            arr.remove(i);
            arr.add(0);
        }
    }
    return arr;

}

该方法似乎适用于除此之外的所有输入: [4, 0, 0, 0, 0, 0]

我的程序输出: [0, 0, 4, 0, 0, 0] 而不是 [4, 0, 0, 0, 0, 0]

标签: java

解决方案


您可以跟踪原始大小,然后删除所有零并使用原始大小与当前大小一次性将它们添加回来

public static List<Integer> zerosBack(List<Integer> arr) {
    int count = arr.size();
    arr.removeIf(v -> v == 0);
    if (count != arr.size()) {
        arr.addAll(Collections.nCopies(count - arr.size(), 0));
    }

    return arr;
}

推荐阅读