当前位置: 首页 > 面试题库 >

从ArrayList中删除重复的值

薛利
2023-03-14
问题内容

我有一个字符串数组列表,并在其中添加了一些重复值。我只想删除那个重复的值,那么如何删除它。

在这个例子中我有一个主意。

List<String> list = new ArrayList<String>();
        list.add("Krishna");
        list.add("Krishna");
        list.add("Kishan");
        list.add("Krishn");
        list.add("Aryan");
        list.add("Harm");

        System.out.println("List"+list);

        for (int i = 1; i < list.size(); i++) {
            String a1 = list.get(i);
            String a2 = list.get(i-1);
            if (a1.equals(a2)) {
                list.remove(a1);
            }
        }

        System.out.println("List after short"+list);

但是有没有足够的方法来删除该重复表格列表。没有使用For循环?我可以通过使用HashSet或其他方式来做到这一点,但只能使用数组列表。想对此提出您的建议。谢谢您的提前答复。


问题答案:

您可以LinkedHashSet从列表中创建一个。在LinkedHashSet将包含每个元素只有一次,在相同的顺序List。然后List从创建一个新的LinkedHashSet。如此有效,它是单线的:

list = new ArrayList<String>(new LinkedHashSet<String>(list))

任何涉及List#containsList#remove可能将渐近运行时间从O(n)(如上例中)减少到O(n ^ 2)的方法。

编辑 对于注释中提到的要求:如果要删除重复的元素,但忽略大小写而将字符串视为 相等 ,则可以执行以下操作:

Set<String> toRetain = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
toRetain.addAll(list);
Set<String> set = new LinkedHashSet<String>(list);
set.retainAll(new LinkedHashSet<String>(toRetain));
list = new ArrayList<String>(set);

它的运行时间为O(n * logn),仍然比许多其他选项要好。注意,这看起来比可能要复杂一些:我假设列表中元素的 顺序
可能不会更改。如果列表中元素的顺序无关紧要,则只需

Set<String> set = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
set.addAll(list);
list = new ArrayList<String>(set);


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 是什么导致java.lang.ArrayIndexOutOfBoundsException,如何防止它发生? (25个答案) 4年前关闭。 所以我有另一个带有main方法的类,在该类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)处得到一个Index

  • 问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。

  • 问题内容: 谢谢Marko。我重写代码。尝试使其简单。这次它可以真正编译。但它只能删除彼此相邻的重复项。例如,如果我输入1 2 3 3 4 4 5 1,则输出为1 2 3 4 5 1。最后它无法拾取重复项。(顺便说一句:本网站的新内容,如果使任何显示混乱我的歉意) 这是新的代码: 问题答案: 要回答“删除java arraylist中的重复项”问题: 只需将所有元素放到中,就可以完成。 -要么-

  • 我有一个arraylist,它包含一对整数(例如int i,int j)。但它可能包含重复对(如(int i,int j)和(int j,int i))。现在如何在O(n)时间复杂度中去除重复。

  • 问题内容: 我有一个,并且我想从中删除重复的字符串。我怎样才能做到这一点? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加回中: 当然,这破坏了中元素的顺序。

  • 我很难从自定义对象的ArrayList中删除重复项。 删除重复项 自定义对象等于() 删除重复项后的输出 关于为什么它实际上没有删除重复项,有什么提示吗?或者它实际上是通过将副本替换为原始副本来删除副本?不知道这里发生了什么。