Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
对长字符串列表进行排序通常很耗时。如果排序算法重复比较字符串,则可以使用 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