使用Comparable和Comparator接口比较对象

其实对象比较的接口就这么两个, 了解清楚了什么时候该用哪个心里也就有了谱了,之前不太理解这两个,反正基本上没有将这

两个排序接口分别开,为了应付面试也就背了排序就用这两个接口就行了,至于具体的就没怎么了解过了,其实这是很不应该的

,为什么设计两个接口,自然是因为一个接口不能满足使用,废话说了这么多,接着就说说这两个接口的使用。


Comparable接口使用比较简单,直接使比较对象实现这个接口就行了,然后实现compareTo方法即可实现排序,其实这个接口应该满足

我们开发中的大部分场景。奋斗貌似也就这么一种用法

	@Override
	public int compareTo(Person o) {
		return this.getAge() - o.getAge();
	}


排序使用:1.对象数组,用Arrays.sort(people);  2.集合,用Collections.sort(people)


还有一种就是Comparator接口,看其他博客都将Comparator排序接口叫做【外部比较器】,而将Comparable排序接口叫做【内部比较器】,

这么说基本没啥大问题,顾名思义,也就是说Comparable用在排序类的内部,Comparator用在排序类的外部。


就我的理解而言,在什么场景下使用Comparator呐?一般是被比较的对象没有实现Comparable接口,然而又想按照某种我们自定义的规则进行

比较,但是又不能修改那个类本身,Comparator就是适合这种场景,新建一个类实现Comparator接口(如PersonComp),实现compare方法,

排序的时候就可以用:

1.对象数组,用Arrays.sort(people,new PersonComp());  2.集合,用Collections.sort(people,new PersonComp())


不过这似乎有点麻烦,专门为一个排序写一个类,然后只实现一个方法,大财小用了,没关系,我们还可以用如下这种方式使用Comparator接口

Arrays.sort(people,new Comparator<Person>() {
	public int compare(Person o1, Person o2) {
		return o1.getAge()-o2.getAge();
	}
});

对应的people集合就可以用

Collections.sort(people,new Comparator<Person>() {
	public int compare(Person o1, Person o2) {
		return o1.getAge()-o2.getAge();
	}
});


另外,其实Comparator也是可以当作【内部比较器】来用的,比如类Person也可以实现Comparator接口,然后实现compare方法,只是在调用

的时候注意也要用对应的Comparator的调用方式才是,比如Arrays.sort(people,new  Person())。(people是Person类型的数组,并且实现了Comparator接口


不过.....既然可以修改排序对象类,干嘛不用Comparable呐?哈哈,所以上述方法有点鸡肋了,不过主要说明的是它也可以这么用而已。大笑




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值