java 比较器_Java中的可比与比较器

Comparable并且Comparator是通过Java核心API提供了两个接口。从它们的名称中,我们可以看出它们可能以某种方式用于比较对象。但是它们到底是什么,它们之间有什么区别?以下是回答此问题的两个示例。简单的示例比较两个HDTV的大小。阅读代码后,如何使用Comparable vs. Comparator很明显。

deaa51be19c6e614498df16f5c154a1b.png

1.可比

Comparable为了能够将自身的对象与某些其他对象进行比较,该类由类实现。类本身必须实现接口,以便能够比较其实例。实现所需的方法是compareTo()。这是一个例子:

0b468eda1d7eb4cb893605a824e9a1ed.png

Sony is better.

2.比较器

在某些情况下,您可能不想更改类并使其具有可比性。在这种情况下,Comparator如果要基于某些属性/字段比较对象,可以使用。例如,可以根据“身高”或“年龄”等对2个人进行比较(使用可比性无法做到)。

实现所需的方法是compare()。现在,让我们使用另一种方式来比较这些电视的尺寸。Comparator排序的一种常见用途是。无论Collections和Arrays类提供使用排序方法Comparator。

importjava.util.ArrayList;import java.util.Collections;import java.util.Comparator;

classHDTV {

classSizeComparator implements Comparator {

publicintcompare(HDTV tv1, HDTV tv2) {

inttv1Size = tv1.getSize();

inttv2Size = tv2.getSize();

if(tv1Size > tv2Size) {

} elseif(tv1Size < tv2Size) {

HDTV tv3 = newHDTV(42, "Panasonic");

ArrayList al = newArrayList();

al.add(tv1);

al.add(tv2);

al.add(tv3);

Collections.sort(al, newSizeComparator());

for(HDTV a : al) {

System.out.println(a.getBrand());

输出:

Panasonic

Samsung

Sony

通常,我们可能会使用Collections.reverseOrder()方法来获得降序比较器。如下所示:

8cfbcaa24053200266fbaa182ec1f89e.png

[3,1,2]

[1,2,3]

[3,2,1]

3.何时使用哪个?

简而言之,实现的类Comparable将是可比较的,这意味着可以将其实例进行相互比较。

实现的类Comparator主要用于两种情况:1)可以将其传递给排序方法,例如Collections.sort()或Arrays.sort(),以精确控制排序顺序; 2)还可用于控制某些数据的顺序结构,例如排序集(例如TreeSet)或排序图(例如TreeMap)。

例如,创建一个TreeSet。我们可以将构造函数传递给比较器,也可以使对象类具有可比性。

方法1-TreeSet(比较器比较器)

classDog {

intsize;

Dog(ints) {

size = s;

classSizeComparator implements Comparator {

publicintcompare(Dog d1, Dog d2) {

returnd1.size - d2.size;

publicclassImpComparable {

TreeSet d = newTreeSet(new SizeComparator()); // pass comparator

d.add(newDog(1));

d.add(newDog(2));

方法2-实施可比性

1d8aa667b22ec3b643712ac706318d80.png

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

1590d0d63b7fd69e285ae86063807c90.png

1160b3821f966060708f1450747fac8f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值