Java.util.Collections.sort(List l) 排序 [implements Comparable]

来源:互联网 发布:青蜂网络 编辑:程序博客网 时间:2024/06/11 03:08
http://blog.163.com/it_novice/blog/static/20918306920133891020132/中提到过sort对于字符串和数字的排序
下面主要讨论下对于Object的排序(主要是Object内部的参数,例如按Pig的体重对Pig们排序,或者按名字对pig排序)
 以下是利用Comparable接口实现:(缺点,只能使一个类拥有一种排序方法)
利用Comparator接口实现的更加完善的多种排序方法见:
http://blog.163.com/it_novice/blog/static/20918306920133985433867/

例:按PIG的名字的升序将猪猪们排列

关sort()方法的描述:
public static <T extends Comparable<? super T>> void sort(List<T> list)
将指定的序列按自然顺序升序排序,List中所有元素必须实现Comparable接口,元素两两之间必须相互可比较,否则会抛出异常ClassCastException

先看一看该程序的main函数:
Java.util.Collection.sort(List l) 排序 - 小镜子~ - 菜园子
 
由于System.out.println(anObject)执行时都会调用toString()
而toString()是定义在Object类中的
一般而言,不人为在类中覆盖toString()方法,默认的toString(anObject)范围的字符串是这样的:

Java.util.Collection.sort(List l) 排序 - 小镜子~ - 菜园子


所以为了让System.out.println(anObject)输出正确的pig的名字,我们要人为覆盖toString()方法

以下是Pig类的代码:
Java.util.Collection.sort(List l) 排序 - 小镜子~ - 菜园子
 
 
 在之前对于sort()方法的描述和上面的代码中我们可以看到,被sort的对象的类必须implements Comparable<T>并且实现接口内的int compareTo()方法
 

 
int compareTo(T o)方法的实现:
关于int compareTo(T o)的说明是这样的
【返回一个负值,0,正值,来表示这个object小于,等于,或大于括号中指定的object】
public int compareTo(Pig pig){
return name.compareTo(pig.getName());
//name比括号中的那个pig的name‘大’则返回1,一样就返回0,‘小于’则返回-1 
//相当于给系统一个排序的规则进行排序
//这样写是顺着系统的逻辑的,是升序
//降序怎么写,且看后文
}

关于class Pig implements Comparable<T>:T基本要跟class一样,因为都是猪跟猪比,人跟人比,鸡翅膀不能跟鸡屁股比

以下是程序的输出结果(升序):
Java.util.Collection.sort(List l) 排序 - 小镜子~ - 菜园子
 
降序怎么写:
只要把compareTo()内部的人return 换一换:(换言之 本pig比你小才返回1(原来是本pig比你大返回1))
Java.util.Collection.sort(List l) 排序 - 小镜子~ - 菜园子

降序的输出结果:
Java.util.Collection.sort(List l) 排序 - 小镜子~ - 菜园子
 
程序的代码下载:http://yunpan.cn/QEteTavUgItuD