对象比较

200 阅读2分钟

两个对象之间比较大小,JAVA中提供了两种比较实现的方式

1. 实现comparator接口的compare方法

(实现comparator 接口:匿名内部类或者写一个类实现该接口)

public int compare(String o1, String o2):比较其两个参数的顺序。

两个对象比较的结果有三种:大于,等于,小于。

如果要按照升序排序,

则o1 小于o2,返回(负数),相等返回0,01大于02返回(正数)

如果要按照降序排序

则o1 小于o2,返回(正数),相等返回0,01大于02返回(负数)

Comparator接口强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort)。comparator接口,该接口代表一个比较器

image.png

image.png

image.png

2. 实现Comparable接口的compareTo方法

(自定义对象在调用sort()排序时需要实现该接口并重写compareTo方法)

Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

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

当前对象.compareTo(需要比较的对象) o1.compareTo(o2)

·如果返回值等于零:o1=o2

·返回值大于零则o1>o2

·返回值小于于零则o1<o2

原理如下:

image.png

但实际一般这样写(在实现时指定泛型,比较的方法就不用强转换)

image.png

Comparable接口和Comparator接口俩者比较

comparable需要比较的对象来实现接口。

comparator需要定制一个比较类去实现它,重写里面的compare方法,对象不用做任何改变。

如果类没有实现比较功能,怎么给装有该类的List集合排序?

使用比较器(Comparator)

一.调用Collections.sort(List T, Comparator<? super T> c)重载方法,传入list和比较器对象实现排序

二.使用List的sort(Comparator<? super T> c)方法,传入比较器对象来排序