これらのインターフェイスがコレクション内のオブジェクトの並べ替えに使用することは知っています。しかし、私はそれらの本当の違いに疑問を持っています。私が読んだ1つの事実は、現在のオブジェクト(これ)なしで2つのオブジェクトを比較したい場合に比較可能なものを使用することです。
しかし、私の問題は、コンパレータを使用しても、同じオブジェクトタイプを比較することです。
ここで本当に違いは何ですか。私は混乱しています。次の例を考えてみましょう。
class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int compareTo(Person anotherPerson){
int anotherPersonAge =anotherPerson.getAge();
return this.age - anotherPersonAge;
}
}
コンパレーターを使用する場合、クラスにコンパレーターを実装させ、this.ageの代わりにperson.ageを実装します。では、ここでは何がそんなに違うのでしょうか?
public class LastNameComparator implements Comparator<Person> {
public int compare(Person person, Person anotherPerson) {
int age1 = person.getAge();
int age2 = anotherPerson.getAge();
return age1 - age2;
}
}
内部ロジックCollections.sortの使用法がわかりません。その点については、上記の点を正当化してください。
また、-1、1、または0の権利を返す必要はないと思います。上記の実装も有効ですよね?私が抱えている問題の1つは、1を返す場合、リストはどのようにアイテムを昇順または降順で並べ替えることができるかということです。その違いを考慮し、違いに応じて並べ替えると思いました。