import java.util.*; public class ComparatorUsage { public static void main(String[] args) { // Choice of comparator. // Set strSet = new TreeSet(); // (1a) // Set strSet = new TreeSet(String.CASE_INSENSITIVE_ORDER); // (1b) Set strSet = new TreeSet(new RhymingStringComparator()); // (1c) // Add each command line argument to the set. for (int i=0; i < args.length; i++) { // (2) strSet.add(args[i]); } System.out.println(strSet); // (3) } } class RhymingStringComparator implements Comparator { public int compare(Object obj1, Object obj2) { // (4) // (5) Create reversed versions of the strings. String reverseStr1 = new StringBuffer((String) obj1).reverse().toString(); String reverseStr2 = new StringBuffer((String) obj2).reverse().toString(); // Compare the reversed strings lexicographically. return reverseStr1.compareTo(reverseStr2); // (6) } }
The program is run with the following program arguments on the
command line:
>java ComparatorUsage court Stuart report Resort assort support transport distort
Output from the program using the natural order (1a):
[Resort, Stuart, assort, court, distort, report, support, transport]
Output from the program using the case insensitive order
(1b):
[assort, court, distort, report, Resort, Stuart, support, transport]
Output from the program using the rhyming order (1c):
[Stuart, report, support, transport, Resort, assort, distort, court]
No comments:
Post a Comment