Java中如何使用Collat​​ionKey类对字符串数据进行排序?

当必须多次比较字符串时,例如在对字符串列表进行排序时。 使用CollationKey类更有效。 使用CollationKey比较字符串通常比使用Collator.compare()更快。

您不能直接创建CollationKey。 而是通过调用Collator.getCollationKey()方法生成它们。 您只能比较从同一个Collator对象生成的CollationKey。

package org.nhooo.example.text;

import java.text.CollationKey;
import java.text.Collator;
import java.util.Arrays;
import java.util.Collections;

public class CollationKeyExample {
    public static void main(String[] args) {
        String[] countries = {
                "German",
                "United Kingdom",
                "United States",
                "French",
                "Japan",
                "Myanmar",
                "India"
        };

        System.out.println("original:");
        System.out.println(Arrays.toString(countries));

        // 获取默认语言环境的整理器对象
        Collator collator = Collator.getInstance();

        // 创建并初始化CollationKey数组
        CollationKey[] keys = new CollationKey[countries.length];

        for (int i = 0; i < countries.length; i++) {
            // 通过调用生成CollationKey
            // 然后将Collator.getCollationKey()方法分配给
            // keys,它是CollationKey的数组。
            // 给定String的CollationKey基于 
            // 整理器的整理规则。
            keys[i] = collator.getCollationKey(countries[i]);
        }

        // 排序键数组
        Collections.sort(Arrays.asList(keys));

        // 打印出排序后的数组
        System.out.println("sorted result: ");
        StringBuilder sb = new StringBuilder("[");
        for (CollationKey key : keys) {
            sb.append(key.getSourceString()).append(",");
        }
        sb.deleteCharAt(sb.length() - 1).append("]");
        System.out.println(sb.toString());
    }
}

以下是程序的结果:

original:
[German, United Kingdom, United States, French, Japan, Myanmar, India]
sorted result: 
[French,German,India,Japan,Myanmar,United Kingdom,United States]