Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息,请参阅JDK发行说明。
对长列表的字符串进行排序通常是耗时的。如果您的排序算法需要重复比较字符串,您可以使用 CollationKey 类来加快这个过程。
CollationKey 对象表示给定的 String 和 Collator 的排序键。比较两个 CollationKey 对象涉及对排序键的按位比较,比使用 Collator.compare 方法比较 String 对象更快。然而,生成 CollationKey 对象需要时间。因此,如果一个 String 只需要比较一次,Collator.compare 提供了更好的性能。
下面的示例使用 CollationKey 对象对单词数组进行排序。此示例的源代码位于 KeysDemo.java 中。
KeysDemo 程序在 main 方法中创建了一个 CollationKey 对象数组。要创建一个 CollationKey,您需要在 Collator 对象上调用 getCollationKey 方法。除非两个 CollationKey 对象来自相同的 Collator,否则不能比较它们。以下是 main 方法的代码:
static public void main(String[] args) {
Collator enUSCollator = Collator.getInstance(new Locale("en","US"));
String [] words = {
"peach",
"apricot",
"grape",
"lemon"
};
CollationKey[] keys = new CollationKey[words.length];
for (int k = 0; k < keys.length; k ++) {
keys[k] = enUSCollator. getCollationKey(words[k]);
}
sortArray(keys);
printArray(keys);
}
sortArray 方法调用 CollationKey.compareTo 方法。如果 keys[i] 对象小于、等于或大于 keys[j] 对象,则 compareTo 方法返回小于零、等于零或大于零的整数。请注意,该程序比较的是 CollationKey 对象,而不是原始单词数组中的 String 对象。以下是 sortArray 方法的代码:
public static void sortArray(CollationKey[] keys) {
CollationKey tmp;
for (int i = 0; i < keys.length; i++) {
for (int j = i + 1; j < keys.length; j++) {
if (keys[i].compareTo(keys[j]) > 0) {
tmp = keys[i];
keys[i] = keys[j];
keys[j] = tmp;
}
}
}
}
KeysDemo 程序对 CollationKey 对象数组进行排序,但最初的目标是对 String 对象数组进行排序。为了获取每个 CollationKey 的 String 表示形式,该程序在 displayWords 方法中调用 getSourceString,如下所示:
static void displayWords(CollationKey[] keys) {
for (int i = 0; i < keys.length; i++) {
System.out.println(keys[i].getSourceString());
}
}
displayWords 方法打印以下行:
apricot grape lemon peach