java - 为什么大写在这里没有正确排序?

标签 java sorting alphabetical

我正在尝试对 List<String> 进行排序项目。这是未排序的 List ,以及当前的排序方式:

Unsorted: [Pineapple, pineapple, apple, apricot, Banana, mango, Mango, melon, peach]
Sorted: [apple, apricot, Banana, mango, Mango, melon, peach, Pineapple, pineapple]

怎么会Mango未放在 mango 之前, 为什么是 Pineapple之前pineapple

这是我的代码:

import java.util.*;
import java.lang.*;
import java.io.*;

class Test {
    public static void main (String[] args) throws java.lang.Exception {
        List<String> fruits = new ArrayList<String>(7);

        fruits.add("Pineapple");
        fruits.add("pineapple");
        fruits.add("apple");
        fruits.add("apricot");
        fruits.add("Banana");
        fruits.add("mango");
        fruits.add("Mango");
        fruits.add("melon");        
        fruits.add("peach");

        System.out.println("Unsorted: " + fruits);

        Collections.sort(fruits, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {              
                return o1.compareToIgnoreCase(o2);
            }
        });

        System.out.println("Sorted: " + fruits);
    }
}

最佳答案

您使用 compareToIgnoreCase() 作为您的比较方法,因此它将 'Pineapple' 和 'pineapple' 比较为 0(相同的字符串),使它们按照从 Collections 开始排序时的顺序排列.sort 保证相等的元素不会被重新排序。 换句话说,'Pineapple' 出现在 'pineapple' 之前,因此由于 ignoreCase,它们现在是相等的字符串,'Pineapple' 将保留在 'pineapple' 之前。

由于未排序的列表在“菠萝”之前有“菠萝”,比较将它们以相同的顺序放入排序列表中。这些相同的规则适用于“芒果”和“芒果”。您正在寻找的比较方法只是 compareTo(),它确实考虑了大写和小写字母。

关于java - 为什么大写在这里没有正确排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369738/

相关文章:

java - 与 do while 循环和变量混淆

java - 多个搜索结果,一个 GUI

java - 排序二维数组时类型不匹配

MySQL 连接表并按计数和字母顺序对数据进行排序

linux - 如何在 Bash 中按字母顺序排列小数点后的数字

Java GC : How does Java GC clears WeakReference object?

java - 在您自己的 Android 应用程序中调用第 3 方 native 库

C# 列表集合 - 排序

c# - 使用 DateTime 对 C# ArrayList 进行排序

python - 在Python中连接具有不同列数的数据帧后,如何不让列按字母顺序排序