首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 集合排序完全指南:Comparable、Comparator 與 Collator 國際化排序

     編輯:Java 相關知識

List 排序基礎

Collections.sort(list) 要求元素實作 Comparable;若需自訂順序或元素未實作 Comparable,傳入 Comparator。排序為原地排序,若需保留原順序請先複製:

List copy = new ArrayList<>(original);
Collections.sort(copy);

常見排序策略

1. 反序排序

Collections.sort(list, Collections.reverseOrder());

2. 不分大小寫排序

// 使用 String 內建常數
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
// 或自訂 Comparator
Comparator ci = (s1, s2) -> s1.toLowerCase().compareTo(s2.toLowerCase());
注意:sort 為穩定排序,相同鍵值元素相對順序保持不變。若列表含 "woman" 與 "Woman",排序結果取決於原始順序。

3. 國際化/語言敏感排序

使用 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 自動維序

若主要需求為有序存取且無重複元素,改用 TreeSet(可指定 Comparator),元素永遠保持排序狀態,無需手動排序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved