- ベストアンサー
compareToについて
- JavaのArrays.sortメソッドのcompareTo(Object g)について詳しく教えてください。
- -(age - ((Girl)g).age)の意味がわかりません。説明していただけますか?
- Girlクラスのオブジェクトを比較するために使われる、compareToメソッドについて教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Arrays.sort(Object[] a)は、配列aの要素を並べ替えます(ソート)。 効率よくソートするアルゴリズムにはいろいろあるのですが、どれも (1)2つの要素を比較してどちらが前か判定する (2)(1)の操作を効率のよい順序で行っていく ということに尽きます。 Arrays.sort(Object[] a)は、(2)のロジックを行いますが、 (1)の比較条件は、各アプリケーションの都合によるので、 Arrays.sort(Object[] a)が決めることはできません。 比較条件はアプリケーション作成者が与える必要があります。 比較条件の与え方は2通りあります。 1つはjava.util.Comparatorを使う方法です。 Comparatorを実装したクラスのインスタンスが判定役となり、 与えられた2つの比較対象を比較条件によって決定します。 今回の方法とは異なるので、詳細は割愛します。 もう1つは今回の方法であるjava.lang.Comparableを使う方法です。 Comparableは、比較対象となるインスタンスに実装します。 比較対象は、自分自身と引数で渡された相手を比較し、 自分が前なら負数、同じなら0、自分が後なら正数を返します。 その判定に使われるメソッドが、int compareTo(Object o)です。 質問の例では、compareToはこうなっています。 public int compareTo(Object g) { return -(age - ((Girl)g).age); } 自分のageから相手のageを引き、その符号を逆転しています。 自分のage>相手のageのとき、負の値を返します。 自分のage=相手のageのとき、0を返します。 自分のage<相手のageのとき、正の値を返します。 つまり、ageが大きい方が前にくるようになります。 言い換えれば「ageの降順」というやつですね。
その他の回答 (2)
- osumitan
- ベストアンサー率33% (102/307)
No.2です。 > このageは自分のageと相手のageの大きいほうのことでいいのでしょうか? int compareTo(Object o)の戻り値は、引数で渡された相手と比べて ・自分の並び順が前になるときは負の値(<0) ・自分の並び順が後になるときは正の値(>0) ・同じときは0 になります。 符号だけ気をつければ絶対値はいくつでも関係ないので、 どんな判定方法で戻り値を決めてもいいんですが、 数値を比較するときは、たいてい引き算の結果で返します。 条件が昇順(=小さい値が前)なら、「自分-相手」です。 この例ではたぶん条件を降順(=大きい値が前)にしたいので、 頭にマイナスをつけてるわけです。
- koko_u_u
- ベストアンサー率18% (216/1139)
>Arrays.sort(a)のcompareTo(Object g)では、 >どのようなことが起きてるのかわかりません。 Arrays は「配列」の一般なので、実際に格納されているオブジェクトが Girl オブジェクトかどうかを知りません。 Arrays.sort() が必要とするのは、配列に格納されているオブジェクトが 「比較可能」であることだけです。 そのためにあなたは Comparable インターフェイスを実装したのです。 >-(age - ((Girl)g).age)の意味がよくわからないのですが、 年齢で比較するという意味です。 Arrays.sort(T[] a, Comparator<? super T> c) のジェネリックなバージョンを 使った方がよいと思いますけど。
お礼
回答ありがとうございます。 >-(age - ((Girl)g).age)の意味がよくわからないのですが、 なのですが、どうやって年齢を比較してるのかどうか知りたいのです。 どうかご教授よろしくお願いします。
お礼
回答ありがとうございます。 >>ageが大きい方の前にくるようになります このageは自分のageと相手のageの大きいほうのことでいいのでしょうか?