ArrayList.sort(new Comparator());←なぜOK?
Q&A
Closed
ArrayList.sort(new Comparator());←なぜOK?
なぜ引数をComparator.compare()のようにしなくてよいのでしょうか。
Java SE 11 Silverの勉強中です。
なんでこの書き方で動くの?という種類の質問です。
・問題集のコード
・疑問点
の順に書かせていただきました。
問題集のコード
①Sampleクラス、②SampleComparatorクラス、③Mainクラス、があります。
①Sampleクラス
int型のidと、String型のnameをフィールドに持ち、getterが定義されているだけのシンプルなクラスです。
②SampleComparatorクラス(並べ替えのために用意されている)
//importは省略
public class SampleComparator implements Comparator<Sample> {
@Override
public int compare(Sample s1, Sample s2) {
if(s1.getId() < s2.getId()) {
return 1;
}
if(s2.getId() < s1.getId()) {
return -1;
}
return 0;
}
}
③Mainクラス
//importは省略
public class Main {
public static void main(String[] args) {
Sample[] samples = {
new Sample(2, "B"),
new Sample(3, "C"),
new Sample(1, "A")
};
List<Sample> list = new ArrayList<Sample>(Arrays.asList(Samples));
list.sort(new SampleComparator()); //←わからないのはココです!
for(Sample s : list) {
System.out.println(s.getName());
}
}
}
疑問
この部分↓を、
list.sort(new SampleComparator()); //←わからないのはココです!
この書き方↓にしなくてよいのはなぜでしょうか?
SampleComparator sampleComparator = new SampleComparator();
list.sort(sampleComparator.compare);
というのも、SampleComparatorクラスにはcompareメソッド以外もあるかもしれないじゃん!と思ってしまうからです。
Mainクラスでsortメソッドに、「並べ替えにはSampleComparatorクラスを使ってね!」と言っているわけですが、「SampleComparatorクラスのcompareメソッドに従って並び替えてね!」とは言ってなくないですか!?
でも私の言ってることの一部または全部が間違っているはずです。
このままでは試験に受かりません泣
どなたか、ご教示いただけないでしょうか。