用 Arrays 和 Collections 完成高效排序

    如果你对数据结构和算法都很熟悉,那你大可自己编写高效的排序方法。但是如果你对此不是很熟的话, JDK 中为你提供了非常方便的类: java.util.Arrays 和 java.util.Collection 。
    其中,java.util.Arrays 主要是对对象数组进行处理,包括对对象数组填值、查找、比较、排序等。而 java.util.Collection 也具有同样的功能,只是它所处理的对象是对象链表。而且它们的这些方法都是静态的,可以直接调用。下面是具体的例子:

//给对象数组排序
Object[] objects = getObjectArray(); //取得你要排序的对象数组
Arrays.sort( objects );

//给对象链表排序
List objectList = getObjectList(); //取得你要排序的对象链表
Collections.sort( objectList );

注意:使用上述方法时,对象数组或对象链表中的对象必须实现接口:java.lang.Comparable

    用这样方法就可以完成非常高效的排序方法。对于 Arrays 和 Collections 更为详细的使用方法请参阅 JDK 文档。 
//
一个会排序的Vector 
在<<thinking in java>>中看到一段拍案叫绝的代码!起名叫:会排序的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()) < 0;
    }
    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就好了.

这段代码经典地显示了接口的用法,同时启发我们如何规划类的继承关系. 
 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值