Java中的Comparable接口和Comparator

来源:互联网 发布:javascript sort() 编辑:程序博客网 时间:2024/05/18 02:39

    在现实世界中,对象通常是可以比较的.例如,爸爸的车比妈妈的车要贵,这本字典比那本字典要薄,Granny要比Auntie Mollie大,等等。在写面向对象的程序时,通常需要比较一个类的两个实例。一旦实例可以比较,它们就可以被排序。举个例子,给出两个员工,你也许想知道哪一个员工在公司呆的时间要长些。或者,通过first name搜索出来的人你希望通过年龄来对他们排序。这篇文章教你怎么样通过实现java.lang.Comaparable接口和java.lang.Comparator来设计你的类使得实例可以比较.

    大部分的程序员知道怎么样通过java.util.Arrays类中的sort方法来对String数组中的元素进行排序。对于ArrayList中的String实例,你可以通过java.util.Collections类中的方法来对它们进行排序。第一个例子展现了如何通过Arrays.sort方法来对String实例进行排序

 

怎么样通过年龄和名字来比较这些Person实例呢?运用java.util.Arrays类的sort方法,像这样

Arrays.sort(persons);

将会抛出ClassCastException.

当然,你可以写一段你自己的代码通过运用算法例如快速排序、冒泡排序或者其他的来对它们进行排序。但是,这是不实际的。最好的解决办法就是实现java.lang.Comparable接口

 

Using the java.lang.Comparable Interface

实现Comparable接口可以使得你的类实例可以比较。这个接口有一个方法:compareto.这个方法决定了怎么样比较类的两个实例。这个方法具体是:

public int compareTo(Object o)

这个compareto方法能够接收一个对象作为参数,所以你能传递给它任何类型的对象。然而你需要实现的是比较两个同类型的实例。通过它去比较一只大象和一只蚂蚁是说不通的。因此,如果这个方法的参数的类型不和你的类一样那么就会抛出java.lang.ClassCastException异常