一个会排序的Vector


import?java.util.*;
interface?Compare?{
??boolean?lessThan(Object?lhs,?Object?rhs);
??boolean?lessThanOrEqual(Object?lhs,?Object?rhs);
}

class?SortVector?extends?Vector?{
??private?Compare?compare;?
//?To?hold?the?callback
??public?SortVector(Compare?comp)?{
????compare?=?comp;
??}
??public?void?sort()?{
????quickSort(0,?size()?-?1);
??}
??
//?快速排序
??private?void?quickSort(int?left,?int?right)?{
????if(right?>?left)?{
??????Object?o1?=?elementAt(right);
??????int?i?=?left?-?1;
??????int?j?=?right;
??????while(true)?{
????????while(compare.lessThan(
??????????????elementAt(++i),?o1));
????????while(j?>?0)
??????????if(compare.lessThanOrEqual(elementAt(--j),?o1))
???????????????break;?
//?out?of?while
????????if(i?>=?j)?break;
????????swap(i,?j);
??????}
??????swap(i?,?right);
??????quickSort(left,?i-1);
??????quickSort(i+1,?right);
????}
??}
??
//交换位置
??private?void?swap(int?loc1,?int?loc2)?{
????Object?tmp?=?elementAt(loc1);
????setElementAt(elementAt(loc2),?loc1);
????setElementAt(tmp,?loc2);
??}
}

public?class?StringSortTest?{
??
//?自定义比较规则
??static?class?StringCompare?implements?Compare?{
????public?boolean?lessThan(Object?l,?Object?r)?{
??????return?((String)l).toLowerCase().compareTo(
????????((String)r).toLowerCase())? ????}
????public?boolean?
????lessThanOrEqual(Object?l,?Object?r)?{
??????return?((String)l).toLowerCase().compareTo(
????????((String)r).toLowerCase())?<=?0;
????}
??}
??public?static?void?main(String[]?args)?{
????SortVector?sv?=?
??????new?SortVector(new?StringCompare());
????
//?添加Element
????sv.addElement(
"d" );
????sv.addElement(
"A" );
????sv.addElement(
"C" );
????sv.addElement(
"c" );
????
//?排序
????sv.sort();
????Enumeration?e?=?sv.elements();
????
//?输出结果
????while(e.hasMoreElements())
??????System.out.println(e.nextElement());
??}
}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值