Collections.sort(list) 要求元素實作 Comparable;若需自訂順序或元素未實作 Comparable,傳入 Comparator。排序為原地排序,若需保留原順序請先複製:
List copy = new ArrayList<>(original);
Collections.sort(copy);
Collections.sort(list, Collections.reverseOrder());
// 使用 String 內建常數
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
// 或自訂 Comparator
Comparator ci = (s1, s2) -> s1.toLowerCase().compareTo(s2.toLowerCase());
注意:sort 為穩定排序,相同鍵值元素相對順序保持不變。若列表含 "woman" 與 "Woman",排序結果取決於原始順序。
使用 java.text.Collator 與 CollationKey,支援地域相關規則(如西班牙文 mañana 排在 mantra 前)。
public class CollatorComparator implements Comparator {
private final Collator collator = Collator.getInstance(Locale.getDefault()); // 或指定 Locale
public int compare(String s1, String s2) {
return collator.getCollationKey(s1).compareTo(collator.getCollationKey(s2));
}
}
List words = Arrays.asList("man", "Man", "Woman", "woman", "mañana", "Mantra");
// 預設排序(依 Unicode 碼點)
Collections.sort(words);
// 不分大小寫
Collections.sort(words, String.CASE_INSENSITIVE_ORDER);
// 國際化排序
Collections.sort(words, new CollatorComparator());
若主要需求為有序存取且無重複元素,改用 TreeSet(可指定 Comparator),元素永遠保持排序狀態,無需手動排序。