中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > JDK核心API
一个会排序的Vector
作者:未知 时间:2005-07-24 21:14 出处:JR 责编:chinaitpower
              摘要:一个会排序的Vector
在<<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. }

代码详解:
因为我们要做一个会排序的Vector,所以class SortVector extends Vector. 
interface Compare的作用是定义统一的比较大小的接口.

注意class StringCompare ,在它里面定义了String比较大小的规则, 以后我们如何想写个XXXXVector, 只要在写个class XXXXXCompare implements Compare就好了.

这段代码经典地显示了接口的用法,同时启发我们如何规划类的继承关系. 
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有