java - Sort native 方法 Java 的问题

标签 java sorting collections

我正在尝试使用 native sort 方法对元素进行排序。

代码:

List<String> list = new ArrayList();
Collections.sort(list);

输入 1:

Before order: 65 31 37 37 72 76 61 35 57 37
After order:  31 35 37 37 37 57 61 65 72 76
Expected:     Ok.

输入 2:

Before order: 45 186 185 55 51 51 22 78 64 26 49 21
After order:  185 186 21 22 26 45 49 51 51 55 64 78
Expected:     21 22 26 45 49 51 51 55 64 78 185 186

问题是该方法在某些情况下排序错误,我该如何解决?

最佳答案

你有一个 List<String> , 所以 Collections.sort正在订购 String (s) 字典顺序。你可以使用 List<Integer>喜欢

List<Integer> al = Arrays.asList(45, 186, 185, 55, 51, 51, 22, 78, 64, 26, 49, 21);
Collections.sort(al);
System.out.println(al);

但是,如果你必须使用 String (s) 那么您需要提供自定义 Comparator (因为默认的 String 排序不是您想要的)。类似的东西,

List<String> al = Arrays.asList("45", "186", "185", "55", "51", "51", //
        "22", "78", "64", "26", "49", "21");
Collections.sort(al, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(Integer.parseInt(o1), Integer.parseInt(o2));
    }
});
System.out.println(al);

哪些输出(如第一个示例)

[21, 22, 26, 45, 49, 51, 51, 55, 64, 78, 185, 186]

关于java - Sort native 方法 Java 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36145910/

相关文章:

java - 是否有任何 java 集合包装器/集合在多线程访问时失败?

Java Hadoop MapReduce 多值

java - Cloudant 与 Lucene 搜索无法按预期排序

java - Android:是否有更简单的方法在 if else 语句中调用特定整数?

c - 将数组按照从最小到最大的顺序排序 C

java - 如何在集合中搜索(使用比较器)

algorithm - 计数排序的时间复杂度

java - Tomcat 为带空格的请求 URI 返回 505

c# - 如何将 IEnumerable(无类型)转换为 IQueryable<T>?

java - 优先队列\java