javaの学習をしている初学者になります。
比較の部分でABCと出力されるのですが、なぜABCと出力されるのかがわかりません。
最初にif(s1.getId()<s2.getId())の部分で2,3を比較した後、3,1を比較し2,3,1という順番になり次に
if(s2.getId()<s1.getId()) が処理され2,3,1が2,1,3になりBACという答えではないのでしょうか。
ご教授いただけると幸いです。
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()) { System.out.println(s1.getId()+" "+s2.getId()); return -1; } if(s2.getId()<s1.getId()) { //System.out.println(s2.getId()+" "+s1.getId()); return 1; } return 0; } } 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()); } } }
コードをご提示の場合はマークダウンをファイル毎に分けて頂けますか。
> ~BACという答えではないのでしょうか
それでは id によるソートが出来ていないということになります。
結果が ABC とソート出来ているということは、想像されている処理が間違っているということです。
ご提示のコードでは二つ目の if 内の println がコメントになっていますので表示に不足があるでしょうし、コメントになっていなかったとしても 一つ目の if 内の println と同じフォーマットのため区別が付かないでしょう。
さらに両者を区別したとしても、それぞれの判定の結果によって何が行われるかはソートメソッドの実装次第です。
どのようにソートが行われているかをお調べになっているのでしたら、直接ソースコードを探されたほうが良いのではないでしょうか。
list.sort(new SampleComparator());のなかで何が起きているのか?
これは、ソートアルゴリズムによって比較箇所が異なります。
以前、調べたとき、挿入ソートを使っていたと思います。Javaのソースコードを読んでください。型パラメータが登場してわかりにくいですが。
回答1件
あなたの回答
tips
プレビュー