我一直使用可比的界面,通过collection.sort.为我的班级提供自然排序
基本上,如果我有一个人类,我会让它实现可比接口,并提供comareTo的实现。然而,在javadocs中Collections.sort的定义中,我看到了这个签名
public static <T extends Comparable<? super T>> void sort(List<T> list)
我完全不理解泛型的定义?它不应该只是说
<T implements Comparable<T>>
有人能帮我吗?
即使类型参数实现了一个接口,也总是使用带有泛型通配符的扩展。
如果你看一个实现Comparable的类,你会发现它实际上(应该)实现Comparable
如果您考虑传递给可比接口的类型参数以及它在comareTo()方法中的使用方式,这是有意义的。
正如PM 77-1雄辩地指出的那样,super关键字允许类T或它的父类之一实现可比性。
实际上,这意味着T可以实现Comparable
例如,它意味着
学生
类可以实现可比较
public class Person {}
public class Student extends Person implements Comparable<Person> {
@Override public int compareTo(Person that) {
// ...
}
}
在这种情况下,List可以按
Collections.sort()
排序,但只能基于Person
的属性,因为您将学生
实例作为Person
传递到comareTo()
中(当然,除非您向下转换它)。
然而,在实践中,你永远不会看到一个
学生
类实现
可比性
之间的差异是可比较的
class ByAgeAscending implements Comparator<Person> {
@Override public int compare(Person a, Person b) {
return a.getAge() < b.getAge();
}
}
List<Student> students = getSomeStudents();
Collections.sort(students, new ByAgeAscending());
首先,很抱歉再次就这个话题提问。我很清楚这里有很多问题和答案。我已经读了其中的一些,但我的问题是我仍然不知道我做错了什么。这是我的代码: 看来我只是瞎了眼,看不到我的错误,所以如果你们中有人能帮我解决这个问题,我将非常感谢。 编辑:我想做的是确定一条线在左上角有0/0坐标的坐标系中是上、下、最左还是最右。这些点是double类型的。下面是错误消息:
我们的一些用户在排序列表时遇到了这个异常。抛出它的代码是 而 getTime() 的类型为 “long”
是的,我知道有很多问题与相同的问题,但我似乎真的找不到我的比较器有什么问题。 所以,这里是: 代码非常简单:我需要根据它们如何改变我的主要结构对一些对象进行排序,并且我首先想要最高值。 由于计算或对象的影响可能需要一些时间,我只是缓存值以便重用它们,因此在排序之前,我检查是否有缓存值或是否需要计算它。 一旦我计算出将< code>m1或< code>m2应用于我的结构的结果,我就将更改恢复。 你可
我正在看java jpoint会议的视频。 我对以下Alexey Shipilev报告幻灯片有疑问: 请原谅幻灯片上的非英语。实际上作者说变量集是不可能的 附注。 如果我理解Alexey符号正确,它尊重以下代码:
本文向大家介绍比较排序之快速排序(实例代码),包括了比较排序之快速排序(实例代码)的使用技巧和注意事项,需要的朋友参考一下 快速排序(简称快排)因为其效率较高(平均O(nlogn))经常在笔试题中对其考查。 对于快排的第一步是选取一个“基数”,将会用这个“基数”与其它数进行比较交换。而这个“基数”的选择将影响到快排的效率如何,但如果为了选择基数而选择基数则会本末倒置。例如为了找到最佳基数,则需要在
我知道它已经被询问和回答了数百万次,但我仍然无法弄清楚为什么我在排序期间收到了违规。这是我的代码: 我收到了这个错误 有什么想法吗?