为什么这里大写字母排序不正确?

Joh*_* Au 2 java sorting alphabetical

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

Unsorted: [Pineapple, pineapple, apple, apricot, Banana, mango, Mango, melon, peach]
Sorted: [apple, apricot, Banana, mango, Mango, melon, peach, Pineapple, pineapple]
Run Code Online (Sandbox Code Playgroud)

怎么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);
    }
}
Run Code Online (Sandbox Code Playgroud)

eli*_*erg 5

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

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