第12条 深虑实现Comparable接口

本文详细介绍了Comparable接口的概念及其在Java中的应用。实现此接口的对象可以进行自然排序,通过Collections.sort等方法进行排序操作,并且可以作为有序集合中的元素。文章还对比了Comparable与Comparator的区别。

Comparable接口,此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 

如果一个类实现了Comparable接口,就表明他的实例具有内在的排序关系。

public interface Comparable<T>{
    int compareTo(T t);
}

compareTo方法的通用约定与equals方法想似:

1:比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

2:如果由于指定对象的类型而无法与该对象进行比较(如果两个被比较的对象引用不同类的对象),则抛出ClassCastException异常。

3:Comparable接口是参数化的,而且compareTo方法时静态类型的,因此不必进行类型检查,也不必对它的参数进行类型转。如果参数类型不合适,这个调用甚至无法编译。

如果一个域并没有实现Comparable接口,或者你需要一个非标准化的排序关系,就可以使用一个显式的Comparator接口来代替。

Collections.sort(Lists, new Comparator<WkInvest>() {
	@Override
	public int compare(Object o1, Object o2) {
	      return o1.getId.compareTo(o2.getId());
	}
});

一般来说,

在需要排序时,声明的类要去实现Comparable接口,这是常用的模式。

public class PhoneNumber implements  Comparable<PhoneNumber> {
}



转载于:https://my.oschina.net/u/1034176/blog/656818

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值