改善整理性能
对 LongLong 的字符串 列表进行排序通常很耗时。如果您的排序算法反复比较字符串,则可以使用CollationKey
类来加快处理速度。
CollationKey对象代表给定String
和Collator
的排序键。比较两个CollationKey
对象涉及对排序键进行按位比较,并且比将String
对象与Collator.compare
方法进行比较要快。但是,生成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