Я пытаюсь отсортировать два разных массива объектов по определенному атрибуту (объекты «Студент» по объектам «программа» и «Профессор» по «факультету»).Оба класса расширяют мой абстрактный класс «Персона».
public abstract class Person implements Comparable<Person>{
private String name;
private String adress;
//getters, setters, etc., all works properly
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int compareTo(String string) {
return name.compareTo(string);
}
}
Затем, когда я создаю массив из 1000000 случайных объектов «Персона», которые могут быть студентами или профессорами, я решаю отсортировать его в алфавитном порядке по имени:это (работает правильно).
Person personByName[] = arrayPersonas.clone();
Arrays.sort(personByName);
Затем я делю исходный массив Person на два ArrayList, один для объектов Student и другой для объектов Professor:
ArrayList<Student> studentsByProgram = new ArrayList();
ArrayList<Professor> professorsByFaculty = new ArrayList();
for (int i = 0; i < 1000000; i++) {
if (arrayPersonas[i] instanceof Student) {
studentsByProgram.add((Student)arrayPersonas[i]);
} else {
professorsByFaculty.add((Professor)arrayPersonas[i]);
}
}
Проблема возникаеткогда я пытаюсь отсортировать каждый ArrayList в алфавитном порядке по атрибуту, который я хочу, так как он продолжает сортировать их по имени человека:
Collections.sort(studentsByProgram);
Collections.sort(professorsByFaculty);
Здесь я оставляю классы моего ученика и профессора:
public class Student extends Person {
private String program;
private int year;
private double fee;
//constructor, setters, getters, toString, equals
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int compareTo(String string) {
return program.compareTo(string);
}
@Override
public int compareTo(Person t) {
return super.compareTo(t.getName());
}
}
Профессор класс:
public class Professor extends Person {
private String faculty;
private double salary;
//constructor, setters, getters, toString, equals
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int compareTo(String string) {
return faculty.compareTo(string);
}
@Override
public int compareTo(Person t) {
return super.compareTo(t.getName());
}
}
Что я делаю не так?Я думал, что если я вызову «Collections.sort ()» для ArrayList объектов Student, он будет использовать метод «CompareTo ()» из моего класса Student, который использует атрибут «program».Я все еще учусь работать с этими методами, поэтому кое-что я не получаю.