前提
javaの基礎を本で勉強中の初心者です。
下のコードは、ある入門書のサンプルコードを少し変えたものです。
インスタンスをnumberで並び替えています。
下記のコードでエラーはありませんでした。
●環境
・java version 13.0.2
・Atom 1.44.0
・script 3.25.0
・jdk 13.0.2
●OS :windows10
###質問内容
Question.javaの下から6行目の
①Collections.sort(list);
と
Account.javaの下から10行目の
②public int compareTo(Account obj){
の関係、というか繋がりがよく分かりません。
①のCollectionsクラスのsort()メソッドは、()内の順番を入れ替えてくれる。
②のComparableインターフェースから継承されたcompareTo()メソッドは、大小関係を比較してくれる。
そこまでは分かるのですが、②の引数(Account obj)は、どこで渡されたのでしょうか?
Collections.sort(list); から public int compareTo(Account obj){
までの過程、引数の受け渡しの流れがどれだけ考えても理解ができませんでした。
そこで、collectionsクラスとComparableクラス、その他関連したソースコードを読んでみたのですが、分からないクラスを調べていたら、さらに分からないクラスが出てきて、そこでもさらに分からないクラスが出てきて・・・、と頭がパンクしてしまいました。
ソースコードくらい読めないとこれからやっていけない、という意見はごもっともなのですが、とりあえずの基礎学習としては、ここはさらっと流した次に行った方がいいのでしょうか?それともきちんと根本まで理解してから次に進んだ方がいいのでしょうか?
また、もし①②の関係も説明していただけたら幸いです。
ご回答、よろしくお願いします。
該当のソースコード
Question.java(mainのソースコード)
java
1import static java.lang.System.out; 2import java.util.*; 3 4public class Question{ 5 public static void main(String[]args){ 6 List<Account> list=new ArrayList<Account>(); 7 Account a=new Account(); 8 Account b=new Account(); 9 Account c=new Account(); 10 Account d=new Account(); 11 Account e=new Account(); 12 a.setAccountNo("First"); 13 b.setAccountNo("Second"); 14 c.setAccountNo("Third"); 15 d.setAccountNo("Fourth"); 16 e.setAccountNo("Fifth"); 17 a.setNumber(5); 18 b.setNumber(4); 19 c.setNumber(1); 20 d.setNumber(2); 21 e.setNumber(3); 22 list.add(a); 23 list.add(b); 24 list.add(c); 25 list.add(d); 26 list.add(e); 27 Collections.sort(list); //質問したい部分 28 for(Account f:list){ 29 out.println(f.getAccountNo()+" "+f.getNumber()); 30 } 31 } 32}
Account.java
java
1import static java.lang.System.out; 2 3public class Account implements Comparable<Account>{ 4 private String accountNo; 5 private int number; 6 7 public void setAccountNo(String accountNo){ 8 this.accountNo=accountNo; 9 } 10 11 public String getAccountNo(){ 12 return this.accountNo; 13 } 14 15 public void setNumber(int number){ 16 this.number=number; 17 } 18 19 public int getNumber(){ 20 return this.number; 21 } 22 23 public boolean equals(Object o){ 24 if(this==o){ 25 return true; 26 } 27 if(o instanceof Account){ 28 Account a=(Account) o; 29 if(this.accountNo.equals(a.accountNo)){ 30 return true; 31 } 32 } 33 return false; 34 } 35 36 public int compareTo(Account obj){ //質問したい部分 37 if(this.number<obj.number){ 38 return -1; 39 } 40 if(this.number>obj.number){ 41 return 1; 42 } 43 return 0; 44} 45} 46
実行結果
Third 1 Fourth 2 Fifth 3 Second 4 First 5
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/09 02:59
2020/03/09 04:28
2020/03/09 06:55