• ベストアンサー

compareToにおける「自然順序付け」

「自然順序付け」という言葉の意味が分かりません。 回答をよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 もう一息。  先の回答で、hitoクラスの例を挙げました。  ところで、もし、「hitoクラスの大小を比較しなさい。」とだけ言われたら、システムに正しい判断が出来ると思いますか?  無理です。身長順が正解で体重順が間違いなんて、システムに解るはずがありません。  これが、intや、stirngクラスなら、システムにも解ります。(文字列は、国際化がらみで少々面倒なところはありますけれどもね。)  基本的に、基本型以外では、システムは、正しい大小関係を自分で判断することは出来ません。  ところが、例えば、arrayクラスに定義されているsortメソッドでは、sort(object a[])のようにクラスだけを引数として取るメソッドが定義されています。  このオブジェクトの正しいソート順序はなんなのか?この場合に、システムはどうやって、オブジェクトの大小関係を判断しているのか?  というテーマの問題です。  他にも、デフォルトの大小比較を要求するメソッドはいろいろあります。  このようなとき、デフォルトで使われる大小関係を自然順序づけと呼びます。  もちろん、この自然順序づけは勝手にどこかからわいてくるわけではありません。  クラスの自然順序づけを定義してみるなら、  public interface Comparable<T> を実装しているクラスにおいて、メソッドcompareToで定義されている順序を自然順序づけと呼ぶ。  となります。  compareToでどのような結果を出すかは、クラスを作成したプログラマの自由です。一貫性のある答えを出せば、どんな順序を定義しても大丈夫です。大きい順でも小さい順でも、はたまた、仕様書に書かれた摩訶不思議な順序定義表に基づくものでもかまいません。どんなに不自然に見える順序であっても、この関数に書かれた順序が自然順序です。  裏を返せば、Comparable<T>を実装していないクラスの大小関係は、大小関係を必要とするメソッドにおいて、コンパレーターを引数として渡してあげないと、判定できませんということです。

taro_11
質問者

お礼

>>mitoneko様 返信が遅くなり申し訳ありませんでした。 ようやく「自然順序」についての意味を理解することが出来ました。 ありがとうございます。 参考書ももっと具体的に説明して欲しいものです…。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 単なる言葉の定義です。  とあるクラスにおいて、compareToメソッドが定義されている時、このcompareToが返す順序が、このクラスの自然順序づけになるというだけのことです。  あえて、意味を求めるなら、たいていの比較において、このcompareToに定義されている順序がデフォルトで(また、強制的に)使用されるという意味合いでしょうか。  例えば、クラスhitoが定義されているとします。この順序付けはいろいろと考えられます。身長順、体重順、年齢順・・・などなど。ここで、compareToには、身長で比較する実装をしたとします。そうすると、比較を行ういろいろなルーチンでは、通常、身長順で並べることになります。  でも、クラスには、体重順で比較するcompareTaijyuuToをなんてメソッドを定義することも出来ます。この比較も当然有効です。ただし、このメソッドは、特に指定した時にしか使用されません。これが、自然順序づけの「自然」の意味するところと考えてもよいでしょう。

taro_11
質問者

補足

>>mitoneko様 具体的な例を交えての説明をありがとうございます。 私の質問の仕方が不適切でした。申し訳ありません。 今、javaの基礎を勉強しております。解説書にはよく「自然順序」という言葉が出て来ますが、 その定義に関する説明がありません。 プログラマーが順序を定義しない場合、つまりおおまかな意味合いでは、数字なら小さい値から 大きい値、アルファベットならaからzへという感じなのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 自然数は、なぜ「自然」? 

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1218082532 を読んだのですが、 いまいち、理解できませんでした。 自然数という言葉の 「自然」…の意味を、あまり詮索してはいけないのでしょうか。 natural ... という英語の直訳?だとのことですが、 では、natural という言葉に含まれる意味はなんなのか…。 しろうとにも、「へえ」納得出来るようなご説明が、もしもあれば助かります。 よろしくお願いいたします。  

  • 自然発火と自然着火の言葉の意味の違いを教えて下さい。

    自然発火と自然着火の言葉の意味の違いを教えて下さい。 問題集で自然発火と回答したら、答えが自然着火でしたが、自然発火では駄目なのでしょうか。 ご存知の方、わかりやすく教えて下さい。

  • アイメイクの順序

    メイク初心者です。よろしくお願いします。 一重ではれぼったいまぶたなので、二重にしてパッチリしたいです。 ふたえまぶたとアイラインとつけまつ毛をするならどの順序ですれば良いのでしょうか?

  • 大きさというのも順序の一種でしょうか?

    自然数のはたらきで個数を表すはたらきと順序を表すはたらきはまったく互いに独立しているものなのでしょうか?

  • 自然に自然を大切にするのが自然

    「自然に自然を大切にするのが自然」を別の言葉に置き換えるとどうなりますか?

  • 自然は跳躍せず

    「自然は跳躍せず」という言葉を使った人は,ライプニッツが最初ですか? どういう意味で,どういう背景があって,このような言葉を使ったんでしょうか?

  • 「ツケ」、「イザ」は何の意味でしょうか。

    「政府無策のツケ露呈」:イザ!のニュース見出しについて、「ツケ」、「イザ」は何の意味でしょうか。漢字がありますか。宜しくお願い致します。

  • 自然対数をとる?とは・・・

    y=x^x 両辺の自然対数をとると logy=xlogx これはどういうことなのかさっぱりです。 ログについては、たとえばlog(小さい2)8 なら2を何乗かしたら8になります ってことは2を3乗すると8だから log(低?が2)8の答えは3だ!  ということなどは分かるのですが、一番上の式の意味と自然対数をとるという意味が分かりません。 「自然対数」とか「常用対数」とか言葉はしっているのですが、内容がいまいち分からなくて・・・ お願いします!!!

  • 大自然の理(り)尊ぶ

    大自然の理(り)尊ぶ とは、どういう意味なんでしょうか? 私の職場の活動理念?人として大事なことを記したものにある文章です。 『大自然の理尊ぶ〔一心 心根〕』 調べてみましたが、天地自然の理(ことわり)という言葉が出てきて、自然の法則に従うのが大事…とか書いてあったんですが、「自然の法則ってなに?」と、結局いまいちよくわかりませんでした。 あと、その後の〔一心 心根〕も、何が関係してるのかわかりません。 誰かわかりやすく教えてもらえないでしょうか? よろしくお願いします。

  • ニュージーランドの自然について

    ニュージーランドは自然が とっても美しい国ですよね。 そこで質問です。回答お願い致しますm(__)m (1) ニュージーランドの自然の美しい理由を教えてください! (2)ニュージーランドは、その大自然を観光業にしていますが、 その自然を守る工夫や法律などがあったら、 教えてください! どちらか一方だけでも分かる方は、よろしくお願い致します。