java - 删除 ArrayList 中的重复整数
问题描述
我看到很多具有相同主题的帖子(主要是字符串),但还没有找到我的问题的答案。如何从 ArrayList 中删除重复的整数?
import java.util.*;
public class ArrayList2 {
public static ArrayList<Integer> removeAllDuplicates(ArrayList<Integer> list) {
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == list.get(i + 1)) {
list.remove(i);
}
}
return list;
}
}
这是我的代码的开始,出现的唯一问题是如果有 3 个具有相同值的整数,它只会删除其中一个。如果我输入 4,它会删除其中的两个。请不要散列!!!
运行时的 ArrayList 和输出:
List: [-13, -13, -6, -3, 0, 1, 1, 1, 5, 7, 9]
Duplicates Removed: [-13, -6, -3, 0, 1, 1, 5, 7, 9]
这是我第一次使用这个网站,所以请让我知道我是否在格式化方面做错了/如果我错过了我的问题的答案。
解决方案
removeAllDuplicates
您的函数不起作用的具体原因是您在成功比较后仍在迭代。如果仅在 时进行迭代list.get(i) != list.get(i + 1)
,您将摆脱所有重复项。
public static ArrayList<Integer> removeAllDuplicates(ArrayList<Integer> list) {
Collections.sort(list);
int i = 0;
while(i < list.size() - 1) {
if (list.get(i) == list.get(i + 1)) {
list.remove(i);
} else {
i++;
}
}
return list;
}
值得注意的是,上述功能并没有达到预期的那么快。尽管迭代运行得足够快,但最重要的步骤将是排序操作 (O(n log n))。
为避免这种额外的时间复杂性,请考虑使用 HashSet 而不是 ArrayList(如果它仍然适合您的问题的约束)。
推荐阅读
- .net - 如何从 .NET 可执行文件 (.exe) 中获取图标 - Icon.ExtractAssociatedIcon 不起作用
- sql - 获取每个用户的最大日期记录并将其插入临时表 - 性能问题
- python-sphinx - 可以将 Sphinx 设置为根据标题编号(而非文本)自动创建书签吗?
- machine-learning - ValueError:发现样本数量不一致的输入变量:[2, 44]
- c# - 从 MVC Web api 中的存储过程返回 json
- salesforce - 如何测试 Salesforce Prod 部署的 contentdocumentlink 触发器
- python - python [3.8]的while/if语句中不计算布尔字符串
- qt - 如何使用 QCharts 创建子图?
- flutter - 如何在颤动中使用 DropdownButton 制作树选择框
- python - 创建与其自身部分的列表的最有效方法是什么?