Comparable
接口主要用于对自定义对象的数组(或列表)进行排序。
实现Comparable
接口的对象列表(和数组)可以由Collections.sort
(和Arrays.sort
)自动排序。在我们看到如何对自定义对象的对象进行排序之前,让我们看看如何对已经实现 Comparable
的数组元素和包装器类进行排序。
示例:对数组和包装器类进行排序
输出:
在上面的示例中,您已经看到对实现Comparable
接口的数组和对象列表进行排序是多么容易,您只需要调用Collections.sort
(和Arrays.sort
)。
但是,如果要对自定义类的对象进行排序,则需要在自定义类中实现Comparable
接口。
该接口只有一个方法:
由于此方法是抽象的,因此如果实现Comparable
接口,则必须在类中实现此方法。
让我们举个例子来更好地理解这个:
示例:通过实现Comparable
接口对自定义对象进行排序
正如您所看到的,我在Author
类中实现了Comparable
接口,因为我想对这个类的对象进行排序。我已经在compareTo()
方法中编写了排序逻辑,您可以根据需求编写逻辑。我想先按姓氏排序作者姓名,如果姓氏相同,则按名字排序。如果您只想按姓氏排序,那么compareTo()
方法中的第一行就足够了。
Author
类
排序类:SortAuthByNames
输出:
注意:我们应该以这样的方式编写
compareTo()
方法:如果这个(我在这里指的是this
关键字)小于传递的对象那么它应该返回负数,如果大于正数则为零,如果相等则返回 0。
你可能想知道为什么我没有写那个逻辑?因为名字和姓氏是字符串,所以我调用了字符串类的compareTo()
方法,它完全相同。
但是如果我们比较的东西是其他类型的东西,比如int
那么你就可以编写这样的逻辑:
假设Employee
类的对象是(empId
,empName
,empAge
),我们想通过empAge
对对象进行排序]。
或