CollationKey
class.
A
CollationKey
object represents a sort key for a given String
and
Collator
. Comparing two CollationKey
objects
involves a bitwise comparison of sort keys and is faster than
comparing String
objects with the
Collator.compare
method. However, generating
CollationKey
objects requires time. Therefore if a
String
is to be compared just once,
Collator.compare
offers better performance.
The example that follows uses a CollationKey
object to sort an array of words. Source code for this example is in
KeysDemo.java
.
The KeysDemo
program creates an array of
CollationKey
objects in the main
method. To
create a CollationKey
, you invoke the
getCollationKey
method on a Collator
object.
You cannot compare two CollationKey
objects unless they
originate from the same Collator
. The main
method is as follows:
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); }
The sortArray
method invokes the
CollationKey.compareTo
method. The compareTo
method returns an integer less than, equal to, or greater than zero if
the keys[i]
object is less than, equal to, or greater than
the keys[j]
object. Note that the program compares the
CollationKey
objects, not the String
objects
from the original array of words. Here is the code for the
sortArray
method:
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; } } } }
The KeysDemo
program sorts an array of
CollationKey
objects, but the original goal was to sort an
array of String
objects. To retrieve the
String
representation of each CollationKey
,
the program invokes getSourceString
in the
displayWords
method, as follows:
static void displayWords(CollationKey[] keys) { for (int i = 0; i < keys.length; i++) { System.out.println(keys[i].getSourceString()); } }
The displayWords
method prints the following lines:
apricot grape lemon peach