//sortAry.java -- CopyLeft by tsaiwn@csie.nctu.edu.tw //use Arrays.sort( ) to sort an array of some Object //Note java.lang.Comparable, java.util.Comparator import java.util.*; class sortAry { java.io.PrintStream cout = System.out; public static void main(String xx[ ]) { new sortAry( ); } public sortAry( ) { main( ); } // constructor ; call int main( ); int main( ) { String n[ ]={"abc", "bbs", "aaaaa", "cat", "hat", "dog", "god"}; int ht[ ] = { 168, 158, 180, 175, 173, 165, 163 }; double wt[ ] = { 88.5, 75, 76.5, 66, 68, 70, 60, 99, 33}; ST s[ ] = new ST[7]; for(int i=0; i<7; ++i) s[i] = new ST(n[i], ht[i], wt[i]); // name, height, weight cout.printf("Original s: \n"); print(s); Arrays.sort(s); cout.println("\nafter Arrays.sort(s);: "); print(s); God arben = new God( ); // arben is a Comparator Arrays.sort(s, arben); cout.println("after Arrays.sort(s, arben);: "); print(s); Arrays.sort(s, Collections.reverseOrder(arben)); cout.print("after Arrays.sort(s, "); cout.println("Collections.reverseOrder(arben)); : "); print(s); //Java can NOT pass a compare function to sort program return 0; }// int main( ) void print(ST x[ ]) { // print array of ST, 但故意少印兩個元素 cout.print(" "+x[0].name+" "+x[0].height+" "+x[0].wet); for(int i=1; i < x.length-2; ++i) cout.print(", "+x[i].name+" "+x[i].height+" "+x[i].wet); cout.println( ); }//print(ST }//class class ST implements Comparable { ST(String a, int b, double c) { name=a; height=b; wet=c; } public int compareTo(Object bb) { ST b = (ST)bb; System.out.print(". "); return this.height - b.height; } String name; int height; double wet; }//ST class God implements Comparator { public int compare(ST aa, ST bb){ if( aa.wet == bb.wet) return 0; if( aa.wet > bb.wet) return -1; // Descending on wet return 1; } }//class God /********************* D:\COURSE\OOP\ppnt>javac sortAry.java D:\COURSE\OOP\ppnt>java sortAry Original s: abc 168 88.5, bbs 158 75.0, aaaaa 180 76.5, cat 175 66.0, hat 173 68.0 . . . . . . . . . . . . . . . after Arrays.sort(s);: bbs 158 75.0, god 163 60.0, dog 165 70.0, abc 168 88.5, hat 173 68.0 after Arrays.sort(s, arben);: abc 168 88.5, aaaaa 180 76.5, bbs 158 75.0, dog 165 70.0, hat 173 68.0 after Arrays.sort(s, Collections.reverseOrder(arben)); : god 163 60.0, cat 175 66.0, hat 173 68.0, dog 165 70.0, bbs 158 75.0 *************************/