gpt4 book ai didi

java - 比较器适用于我的 ArrayList 但代码看起来不对?

转载 作者:行者123 更新时间:2023-11-29 03:23:14 25 4
gpt4 key购买 nike

我有一个名为 Course 的对象的 ArrayList,我试图以两种方式对它进行排序,按 courseID 和类(class)开始时间。

class Course implements Comparable<Course> {
private int courseID;
private String courseBeginTime;

// implement the compareTo method defined in Comparable
@Override
public int compareTo(Course course) {
if (getCourseID() > course.getCourseID()){
return 1;
} else if(getCourseID() < course.getCourseID()){
return -1;
} else {
return 0;
}
}

然后我有这些比较器:

//implement the comparators
class IDSorter implements Comparator<Course> {
public int compare(Course course1, Course course2) {
return Integer.compare(course1.getCourseID(), course2.getCourseID());
}
}

class startTimeSorter implements Comparator<Course> {
public int compare(Course course1, Course course2) {
return Integer.compare(Integer.parseInt(course1.getCourseBeginTime()),
Integer.parseInt(course2.getCourseBeginTime()));
}
}

我在我的主要方法中像这样对它们进行排序:

Collections.sort(courseList, new IDSorter());
Collections.sort(student.getStudentSchedule(), new StartTimeSorter());

代码有效,我可以获得按 ID 或 startTime 排序的列表....但我不明白为什么。在 Course 类中,compareTo 方法只比较 getCourseID。

需要比较 courseBeginTime 的 StartTimeSorter 如何工作?

我怎样才能重写更有意义?

最佳答案

如果一个类实现了Comparable ,这被认为是此类的自然排序。当您没有给出明确的 Comparator 时,将使用此顺序。至 Collections.sort .这就是为什么 sort 的单参数版本需要 List<T> 的原因。其中 T extends Comparable<? super T> .两个参数版本采用 List<T>对 T 和 Comparator<? super T> 没有限制.所以Course.compareTo在您的示例中未使用。

关于java - 比较器适用于我的 ArrayList 但代码看起来不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22449967/

25 4 0