那可能是我对compareTo的理解有问题,我做了个测试,声明一个Student类(成员变量id,name)实现Comparable接口,然后重写compareTo()方法,
public int compareTo(Student o) {
if(this.id < o.id)
return 1;
else if(this.id > o.id)
return -1;
else
return 0;
}
最后如下做一个打印测试(toString方法省略),
List<Student> studentList = new ArrayList<>();
Student s1 = new Student(10,"s1");
Student s2 = new Student(20,"s2");
Student s3 = new Student(30,"s3");
studentList.add(s1);
studentList.add(s2);
studentList.add(s3);
Collections.sort(studentList);
System.out.println(studentList);
结果如下:
[Student:{id=30, name=s3}, Student:{id=20, name=s2}, Student:{id=10, name=s1}]
从数值上看,是降序排列,但是不是放到优先队列这个案例中,也可以理解为是升序,只不过是数值大小的语意改变了,变成了id=30 < id=20 < id=10 的顺序,10反而要看做是最大值。
所以最大堆的堆顶反而是10。
可以这样理解吗?bobo老师。真实绕晕ing~