java - 将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]
解决方案
您可以跟踪原始大小,然后删除所有零并使用原始大小与当前大小一次性将它们添加回来
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;
}
推荐阅读
- regex - 改进有效的正则表达式
- kubernetes - Kubernetes 网络策略出口端口
- git - 为什么我的 git 代理配置不起作用?我确定我已正确设置它,但它仍然无法正常工作
- unit-testing - 使用指定的初始化器语法跟踪用户定义的“结构”成员
- datetime - 如何在输入控件中获取 java.sql.Timestamp 的默认值表达式
- firebase - 使用颤振在 Firestore 上执行 CRUD 操作的最佳方法是什么?
- java - 无法确定任务 ':myapplication:preHuaweiDebugBuild' 的依赖关系
- angular7 - 如何将值从一个组件更新到另一个组件?
- c# - JsonConvert 反序列化十进制到 jtoken 将其转换为科学数,我如何将其转换回十进制?
- angular - 如何以角度展开/折叠多个面板?