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