两个对象之间比较大小,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接口,该接口代表一个比较器
2. 实现Comparable接口的compareTo方法
(自定义对象在调用sort()排序时需要实现该接口并重写compareTo方法)
Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
compareTo比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
当前对象.compareTo(需要比较的对象) o1.compareTo(o2)
·如果返回值等于零:o1=o2
·返回值大于零则o1>o2
·返回值小于于零则o1<o2
原理如下:
但实际一般这样写(在实现时指定泛型,比较的方法就不用强转换)
Comparable接口和Comparator接口俩者比较
comparable需要比较的对象来实现接口。
comparator需要定制一个比较类去实现它,重写里面的compare方法,对象不用做任何改变。
如果类没有实现比较功能,怎么给装有该类的List集合排序?
使用比较器(Comparator)
一.调用Collections.sort(List T, Comparator<? super T> c)重载方法,传入list和比较器对象实现排序
二.使用List的sort(Comparator<? super T> c)方法,传入比较器对象来排序