我正在尝试对 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/