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

Java 中英文排序解決方案:TreeMap 搭配 Collator 實現本地化排序

     編輯:Java 相關知識

問題根源

預設字串比較依據 Unicode 碼位,中文字符按編碼順序排列,不符合拼音、筆畫或部首等語言習慣排序規則。TreeMap 預設使用自然排序(Comparable),直接存入中文鍵值會產生非預期順序。

解決方案:實作 Comparator 整合 Collator


import java.text.Collator;
import java.text.CollationKey;
import java.util.Comparator;

public class CollatorComparator implements Comparator<Object> {
    private final Collator collator = Collator.getInstance(); // 依據 Locale 取得

    @Override
    public int compare(Object o1, Object o2) {
        String s1 = o1.toString();
        String s2 = o2.toString();
        CollationKey key1 = collator.getCollationKey(s1);
        CollationKey key2 = collator.getCollationKey(s2);
        return key1.compareTo(key2);
    }
}

關鍵類別說明

  • Collator:語言敏感字串比較器,getInstance() 預設使用系統 Locale,可指定 Collator.getInstance(Locale.TRADITIONAL_CHINESE)
  • CollationKey:預計算排序鍵值,比較效能優於直接呼叫 collator.compare(),適合大量排序
  • 強度設定:collator.setStrength(Collator.PRIMARY/SECONDARY/TERTIARY/IDENTICAL) 控制比較敏感度(基礎字符/重音/大小寫/完全相同)

使用範例


TreeMap<String, String> map = new TreeMap<>(new CollatorComparator());
map.put("1", "1");
map.put("華", "華");
map.put("花", "花");

for (String v : map.values()) {
    System.out.println(v);
}

執行結果(以繁體中文 Locale 為例)

1
花
華

符合注音/拼音排序規則(ㄏㄨㄚ 先於 ㄏㄨㄚˊ)。

進階應用:自訂 Locale 與強度


// 針對台灣繁體中文環境
Collator twCollator = Collator.getInstance(Locale.TRADITIONAL_CHINESE);
twCollator.setStrength(Collator.TERTIARY); // 區分大小寫、重音

// 針對大陸簡體中文環境
Collator cnCollator = Collator.getInstance(Locale.SIMPLIFIED_CHINESE);
cnCollator.setDecomposition(Collator.FULL_DECOMPOSITION); // 處理兼容字符

效能優化建議

  1. 重用 CollationKey:大量排序時預先計算鍵值緩存,避免重複轉換
  2. 避免頻繁建立 Collator:實例化成本較高,建議靜態單例或依賴注入
  3. JDK 9+ 使用 Collator.getInstance(Locale) 快取機制:同一 Locale 多次呼叫返回同一實例

替代方案比較

方案優點缺點適用場景
Collator + TreeMap標準 API、支援多語系、可調強度效能較原生比較低一般業務排序、多語系應用
ICU4J Collator功能更強、支援 CLDR、排序規則更豐富需額外依賴、體積較大專業語言處理、複雜排序規則
拼音轉換後排序邏輯直觀、效能佳需第三方庫、多音字處理複雜純中文環境、對拼音排序有嚴格要求
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved