首页 > 解决方案 > 删除 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]

这是我第一次使用这个网站,所以请让我知道我是否在格式化方面做错了/如果我错过了我的问题的答案。

标签: java

解决方案


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(如果它仍然适合您的问题的约束)。


推荐阅读