【问题标题】:How can I sort a list WITHOUT removing duplicates? [closed]如何在不删除重复项的情况下对列表进行排序? [关闭]
【发布时间】:2020-08-28 17:54:52
【问题描述】:

如何在不删除 Java 中的重复项的情况下对列表进行排序?

给定一个包含重复项 {3, 1, 2, 1, 4 } 的列表, 应该对其进行排序,以便最后得到 {1, 1, 2, 3, 4 }。 我不在乎重复的顺序。 它应该适用于具有明确定义的比较器的任意数据结构。

Java List.sort(comarator) 删除重复项。 没有额外的参数来保留重复项。

【问题讨论】:

  • "Java List.sort(comparator) removes duplicates" 文档在哪里说的?
  • “Java List.sort(comparator) 删除重复项。”,你能发布那个代码吗?
  • 你的问题是基于一个错误的前提,如上所述
  • 谢谢。我很困惑,

标签: java sorting duplicates


【解决方案1】:

这个问题是基于一个错误的前提。 List.sort() 不会删除重复项。

import java.util.*;

class Main {
  public static void main(String[] args) {
    List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 2, 1, 4));
    numbers.sort(null);
    System.out.println(numbers);
  }
}

输出:

[1, 1, 2, 3, 4]

(Try it on repl.it)

【讨论】:

  • 我想补充一点,List#sort 实现是稳定的,这意味着它不会改变重复的顺序。
  • 他询问了不稳定的排序并避免了合并排序中的稳定排序
  • @sc0der 再说一遍?我不明白你的评论。
  • 我猜他问的是排序算法的不稳定性,他不在乎重复键
  • @sc0der ? “如何在不删除 Java 中的重复项的情况下对列表进行排序?[...] 我不关心重复项的顺序。” ?
【解决方案2】:

你可以在java中使用Arras.sort(result),它基于Quicksort并且不稳定,所以将整数列表转换为int数组并进行排序

    List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 2, 1, 4));
    int[] result = list.toArray(new int[0]);
    Arrays.sort(result);
    System.out.println(Arrays.toString(result));

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多