|
|
Working with Text |
Sorting long lists of strings is often time consuming. If your sort algorithm compares strings repeatedly you can speed up the process by using theCollationKeyclass.A
CollationKeyobject represents a sort key for a given
StringandCollator. Comparing twoCollationKeyobjects involves a bitwise comparison of sort keys, and is faster than comparingStringobjects with theCollator.comparemethod. However, generatingCollationKeyobjects requires time. Therefore, if aStringis to be compared just once,Collator.compareoffers better performance.The example that follows uses a
CollationKeyobject to sort an array of words. The source code for this example is in the file namedKeysDemo.java.The
KeysDemoprogram creates an array ofCollationKeyobjects in themainmethod. To create aCollationKey, you invoke thegetCollationKeymethod upon aCollatorobject. You cannot compare twoCollationKeyobjects unless they originate from the sameCollator. Themainmethod is as follows:Thestatic 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); }sortArraymethod invokes theCollationKey.compareTomethod. ThecompareTomethod returns an integer less than, equal to, or greater than zero if thekeys[i]object is less than, equal to, or greater than thekeys[j]object. Note that the program compares theCollationKeyobjects, not theStringobjects from the original array of words. Here is the code for thesortArraymethod:Thepublic static void sortArray(CollationKey[] keys) { CollationKey tmp; for (int i = 0; i < keys.length; i++) { for (int j = i + 1; j < keys.length; j++) { // Compare the keys if( keys[i].compareTo( keys[j] ) > 0 ) { // Swap keys[i] and keys[j] tmp = keys[i]; keys[i] = keys[j]; keys[j] = tmp; } } } }KeysDemoprogram sorts an array ofCollationKeyobjects, but the original goal was to sort an array ofStringobjects. To retrieve theStringrepresentation of eachCollationKey, the program invokesgetSourceStringin thedisplayWordsmethod:Thestatic void displayWords(CollationKey[] keys) { for (int i = 0; i < keys.length; i++) { System.out.println(keys[i].getSourceString() + " "); } }displayWordsmethod prints the following lines:apricot grape lemon peach
|
|
Working with Text |