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

本文深入探讨了Java中对象排序的方法,包括使用Comparable接口实现单一排序标准及Comparator接口实现多重排序方式。通过具体示例——对Pig对象按名字升序和降序排列,详细解析了sort()方法的工作原理及compareTo()方法的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.163.com/it_novice/blog/static/20918306920133891020132/中提到过sort对于字符串和数字的排序
下面主要讨论下 对于Object的排序(主要是Object内部的参数,例如按Pig的体重对Pig们排序,或者按名字对pig排序)
 以下是利用Comparable接口实现:(缺点,只能使一个类拥有一种排序方法)
利用Comparator接口实现的更加完善的多种排序方法见:

例:按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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值