|
|
Comparing Strings |
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 CollationKey
object 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.In the example that follows, we'll use a
CollationKeyobject to sort an array of words. The source code for this example is in the file named KeysDemo.java.We create an array of
CollationKeyobjects 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 we compare theCollationKeyobjects, not theStringobjects from the original array of words. Here is the code for thesortArraymethod:We've sorted an array ofpublic 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; } } } }CollationKeyobjects, but our original goal was to sort an array ofStringobjects. To retrieve theStringrepresentation of eachCollationKey, we invokegetSourceStringin ourdisplayWordsmethod: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
|
|
Comparing Strings |