Comparatorインタフェースのcompareメソッドについて
Q&A
Closed
現在JavaSilver SE11を勉強中のJava初学者でございます。
某問題集を勉強していた際に、以下のコードにて不明な点があり、
自分なりに検索はしてみたものの解決に至らなかったため、
こちらで質問をさせていただいた次第でございます。
お手数おかけしますが、ご助力のほどよろしくお願いいたします。
解決したいこと
以下に記載するコードのSampleComparatorクラス内のcompareメソッドの引数についてです。
1回目の処理 (正確な書き方ではないかと思います…) では、s1内のid 2とs2内のid 3を比較して1を戻しているところまではわかりました。
しかし、2回目の処理で、s1内のid 3とs2内のid 1を比較するという動作をしており、どうしてs1とs2にそれぞれリストsamplesの1番目の要素と2番目の要素が入るのかがピンと来ていません。
このような動作をするのであれば、0番目の要素と3番目の要素も同じく受け取ってidの値同士を比較も行われるべきではないだろうか?と思いました。
該当のコード
public class Sample {
private int id;
private String name;
public Sample(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
import java.util.Comparator;
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;
}
}
import java.util.Comparator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
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());
}
}
}