Comparator与Comparable的区别?

本文介绍了Java中Comparable与Comparator两个接口的区别及应用场景。Comparable接口在自定义类内部实现,而Comparator接口则通过外部类实现,两者均可用于对象的比较与排序。

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

相同点:都是用于比较,排序的接口。例如对于List对象,如果存储的对象类型不是自定义的,像String那样已经实现了Comparable接口,可以直接Collections.sort(Stringlistname),就可以排出序来了。而对于自定义的对象类型,就需要我们自己去实现Comparator或者Comparable接口。

 

不同点:Comparable是在自定义类的内部实现的,在类声明的地方加上implements Comparable,然后在其内部实现compare方法。Comparator是在自定义类的外部自定义一个比较类,这个比较类要实现Comparator接口,实现compare方法。也可以不具体定义一个比较类,直接在Comparator的内部将compare方法实现就可以了。总之就是要自己实现一个比较器。
下面通过代码直观的说明:
自定义类为A1:

 (1)A1类内实现Comparable:

 进行排序验证:
 输出结果:
(2)A1类外实现Comparator:
①定义一个具体的类实现Comparator:
进行排序验证: 
 输出结果同上。
②无需定义一个具体的实现类,直接new一个Comparator:

 输出结果同上。
综合:两种方法各有优劣,实现Comparable的方法,一劳永逸,但是需要修改自定义类的源代码。Comparator不需要修改源代码,但是需要在使用的地方对Comparator进行实现。
 
 转载请注明来自:http://java-future.iteye.com
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值