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)
您使用compareToIgnoreCase()作为比较方法,因此它将“Pineapple”和“pineapple”比较为0(相同的字符串),使它们保持排序时找到的顺序,因为Collections.sort保证相等的元素不会被重新排序。换句话说,“Pineapple”出现在“pineapple”之前,因此现在由于ignoreCase它们是相等的字符串,“Pineapple”将保留在“pineapple”前面。
由于未排序列表在“菠萝”之前有“菠萝”,因此比较将它们以相同的顺序放入排序列表中。这些相同的规则适用于“Mango”和“mango”。您正在寻找的比较方法只是compareTo()考虑了大写和小写字母。