覆盖Comparable Interface的compareTo()方法的最佳方法是什么?另外,为什么我们在没有实现的情况下编写自己的compareTo()方法时需要实现Comparable Interface.以下面的Seat类为例:
public class Seat {
private final String seatNumber;
private double price;
public Seat(String seatNumber, double price) {
this.seatNumber = seatNumber;
this.price = price;
}
public int compareTo(Seat seat) {
return this.seatNumber.compareToIgnoreCase(seat.getSeatNumber());
}
}
Run Code Online (Sandbox Code Playgroud)
上面的工作虽然我们没有实现Comparable Interface,但为什么要实现它呢?
当我们在没有实现的情况下编写自己的compareTo()方法时,为什么我们需要实现Comparable Interface
举个例子Collections.sort.签名是
public static <T extends Comparable<? super T>> void sort(List<T> var0)
Run Code Online (Sandbox Code Playgroud)
泛型类型参数意味着我们只能对与自身(或子类型)相当的事物列表进行排序.例如,我们可以对字符串列表进行排序,因为String实现Comparable<String>.也就是说,字符串知道它是否应该自然地落在另一个字符串之前或之后.
如果没有定义此约束的接口,则此方法不可存在.
覆盖Comparable Interface的compareTo()方法的最佳方法是什么?
这完全取决于你正在使用的课程.如果它没有明确的自然顺序那么也许你不应该.座位可以按数量或价格进行分类.任意选择一个并不一定有意义.
出于这个原因,通常上述方法Collections.sort将提供第二个签名,其中包括Comparator:
public static <T> void sort(List<T> var0, Comparator<? super T> var1)
Run Code Online (Sandbox Code Playgroud)
这意味着我们不必随意定义座位是否按数量或价格自然排序.我们可以使用一个代码,使用一个比较器按价格排序,另一个完全独立的代码,使用另一个比较器按座位号排序.
实现的一个优点Comparable是,您不需要公开内部类详细信息来确定实例排序,就像您使用Comparator.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |