//util.java -- @CopyLeft by tsaiwn@csie.nctu.edu.tw
//test some goody in java.util.*
import java.util.*;
class util {
  public static void main(String xx[ ]) { new util( ); }
  util( ) { main( ); }
/// 這樣寫就很容易把 C/C++ 改為 Java; 且不需要寫 static 的變數與函數
  java.io.PrintStream cout=System.out;

  void print(Collection c) {  // can print any Collection
      Iterator it = c.iterator( );
      for(; it.hasNext( ); ) System.out.print(" "+ it.next( ) );
      System.out.println();
  }//print
  <T>void print(T[ ] a) {   // Java array has length attribute
      for(int i=0; i < a.length; ++i) cout.print(" "+ a[i] );
      System.out.println();
  }
  int main( ) {  
     List<Integer> a=new LinkedList<Integer>( );
     a.add(38); a.add(58); a.add(49); a.add(88); a.add(33);
     cout.print("a: "); print(a);
     Collections.sort(a);  print(a);  // can sort List, Vector, Stack
     Collections.sort(a, Collections.reverseOrder( )); print(a);
///
     List<Double> b=new ArrayList<Double>( );
     b.add(38.38); b.add(58.85); b.add(49.49);
     cout.print("b: "); print(b);
     Collections.sort(b); print(b);
     Collections.sort(b, Collections.reverseOrder( )); print(b);
///
     String sa[ ]={"IS", "abcde", "god", "BAD","EGG","U", "dog", "cat"};
     Vector<String> s = new Vector<String>(Arrays.asList(sa));    /////
     cout.print("s: "); print(s);
     Collections.sort(s); print(s);
     Collections.sort(s, Collections.reverseOrder( )); print(s);
   /// String 內有個不管大小寫的比較器(Comparator)可給 sort 用!
     Comparator<String> cmp = String.CASE_INSENSITIVE_ORDER;
     Collections.sort(s, cmp); print(s);  // 不管大小寫 Ascending
     Collections.sort(s, Collections.reverseOrder(cmp)); print(s);
     cout.print("String array sa: "); print(sa);
     Arrays.sort(sa); cout.print("After Arrays.sort(sa): "); print(sa);
  Arrays.sort(sa, cmp); cout.print("Arrays.sort(sa, smp): "); print(sa);
     Arrays.sort(sa, Collections.reverseOrder(cmp) );
     cout.print("After with reverse smp: "); print(sa);
     return 0;
  }//main
}//class
/***********
D:\COURSE\OOP\ppnt>javac util.java

D:\COURSE\OOP\ppnt>java util
a:  38 58 49 88 33
 33 38 49 58 88
 88 58 49 38 33
b:  38.38 58.85 49.49
 38.38 49.49 58.85
 58.85 49.49 38.38
s:  IS abcde god BAD EGG U dog cat
 BAD EGG IS U abcde cat dog god
 god dog cat abcde U IS EGG BAD
 abcde BAD cat dog EGG god IS U
 U IS god EGG dog cat BAD abcde
String array sa:  IS abcde god BAD EGG U dog cat
After Arrays.sort(sa):  BAD EGG IS U abcde cat dog god
Arrays.sort(sa, smp):  abcde BAD cat dog EGG god IS U
After with reverse smp:  U IS god EGG dog cat BAD abcde
*********************************************/
