在<<thinking in java>>中看到一段拍案叫绝的代码!起名叫:会排序的Vector
代码如下:

  1. import java.util.*;
  2. interface Compare {
  3.   boolean lessThan(Object lhs, Object rhs);
  4.   boolean lessThanOrEqual(Object lhs, Object rhs);
  5. }
  6. ////////////////////////////////////////////////////////////////////
  7. class SortVector extends Vector {
  8.   private Compare compare; // To hold the callback
  9.   public SortVector(Compare comp) {
  10.     compare = comp;
  11.   }
  12.   public void sort() {
  13.     quickSort(0, size() - 1);
  14.   }
  15.   // 快速排序
  16.   private void quickSort(int left, int right) {
  17.     if(right > left) {
  18.       Object o1 = elementAt(right);
  19.       int i = left - 1;
  20.       int j = right;
  21.       while(true) {
  22.         while(compare.lessThan(
  23.               elementAt(++i), o1));
  24.         while(j > 0)
  25.           if(compare.lessThanOrEqual(elementAt(--j), o1))
  26.                break// out of while
  27.         if(i >= j) break;
  28.         swap(i, j);
  29.       }
  30.       swap(i , right);
  31.       quickSort(left, i-1);
  32.       quickSort(i+1, right);
  33.     }
  34.   }
  35.   //交换位置
  36.   private void swap(int loc1, int loc2) {
  37.     Object tmp = elementAt(loc1);
  38.     setElementAt(elementAt(loc2), loc1);
  39.     setElementAt(tmp, loc2);
  40.   }
  41. }
  42. ////////////////////////////////////////////////////////////////////
  43. public class StringSortTest {
  44.   // 自定义比较规则
  45.   static class StringCompare implements Compare {
  46.     public boolean lessThan(Object l, Object r) {
  47.       return ((String)l).toLowerCase().compareTo(
  48.         ((String)r).toLowerCase()) < 0;
  49.     }
  50.     public boolean 
  51.     lessThanOrEqual(Object l, Object r) {
  52.       return ((String)l).toLowerCase().compareTo(
  53.         ((String)r).toLowerCase()) <= 0;
  54.     }
  55.   }
  56.   public static void main(String[] args) {
  57.     SortVector sv = 
  58.       new SortVector(new StringCompare());
  59.     // 添加Element
  60.     sv.addElement("d");
  61.     sv.addElement("A");
  62.     sv.addElement("C");
  63.     sv.addElement("c");
  64.     // 排序
  65.     sv.sort();
  66.     Enumeration e = sv.elements();
  67.     // 输出结果
  68.     while(e.hasMoreElements())
  69.       System.out.println(e.nextElement());
  70.   }
  71. }