No.1
- 回答日時:
単なる言葉の定義です。
とあるクラスにおいて、compareToメソッドが定義されている時、このcompareToが返す順序が、このクラスの自然順序づけになるというだけのことです。
あえて、意味を求めるなら、たいていの比較において、このcompareToに定義されている順序がデフォルトで(また、強制的に)使用されるという意味合いでしょうか。
例えば、クラスhitoが定義されているとします。この順序付けはいろいろと考えられます。身長順、体重順、年齢順・・・などなど。ここで、compareToには、身長で比較する実装をしたとします。そうすると、比較を行ういろいろなルーチンでは、通常、身長順で並べることになります。
でも、クラスには、体重順で比較するcompareTaijyuuToをなんてメソッドを定義することも出来ます。この比較も当然有効です。ただし、このメソッドは、特に指定した時にしか使用されません。これが、自然順序づけの「自然」の意味するところと考えてもよいでしょう。
この回答への補足
>>mitoneko様
具体的な例を交えての説明をありがとうございます。
私の質問の仕方が不適切でした。申し訳ありません。
今、javaの基礎を勉強しております。解説書にはよく「自然順序」という言葉が出て来ますが、
その定義に関する説明がありません。
プログラマーが順序を定義しない場合、つまりおおまかな意味合いでは、数字なら小さい値から
大きい値、アルファベットならaからzへという感じなのでしょうか。
No.2ベストアンサー
- 回答日時:
もう一息。
先の回答で、hitoクラスの例を挙げました。
ところで、もし、「hitoクラスの大小を比較しなさい。」とだけ言われたら、システムに正しい判断が出来ると思いますか?
無理です。身長順が正解で体重順が間違いなんて、システムに解るはずがありません。
これが、intや、stirngクラスなら、システムにも解ります。(文字列は、国際化がらみで少々面倒なところはありますけれどもね。)
基本的に、基本型以外では、システムは、正しい大小関係を自分で判断することは出来ません。
ところが、例えば、arrayクラスに定義されているsortメソッドでは、sort(object a[])のようにクラスだけを引数として取るメソッドが定義されています。
このオブジェクトの正しいソート順序はなんなのか?この場合に、システムはどうやって、オブジェクトの大小関係を判断しているのか?
というテーマの問題です。
他にも、デフォルトの大小比較を要求するメソッドはいろいろあります。
このようなとき、デフォルトで使われる大小関係を自然順序づけと呼びます。
もちろん、この自然順序づけは勝手にどこかからわいてくるわけではありません。
クラスの自然順序づけを定義してみるなら、
public interface Comparable<T> を実装しているクラスにおいて、メソッドcompareToで定義されている順序を自然順序づけと呼ぶ。
となります。
compareToでどのような結果を出すかは、クラスを作成したプログラマの自由です。一貫性のある答えを出せば、どんな順序を定義しても大丈夫です。大きい順でも小さい順でも、はたまた、仕様書に書かれた摩訶不思議な順序定義表に基づくものでもかまいません。どんなに不自然に見える順序であっても、この関数に書かれた順序が自然順序です。
裏を返せば、Comparable<T>を実装していないクラスの大小関係は、大小関係を必要とするメソッドにおいて、コンパレーターを引数として渡してあげないと、判定できませんということです。
>>mitoneko様
返信が遅くなり申し訳ありませんでした。
ようやく「自然順序」についての意味を理解することが出来ました。
ありがとうございます。
参考書ももっと具体的に説明して欲しいものです…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#】クラスのコンストラクタ...
-
interface,extend,implementの...
-
デバッグ時に「Source not found」
-
setTextについて
-
抽象クラスをJUNITでテストする...
-
抽象クラスとインタフェースの...
-
Excel vbaのプログラムでガンマ...
-
VB DLLプロジェクトについて
-
cocoa、objective-cのクラスを...
-
インタフェースのstatic変数(Java)
-
インナークラスについて
-
単体テストのテストケースにて...
-
C#からDLLを呼びたいのですが・...
-
タイマーの作り方
-
Java StringBuilderクラスについて
-
肥大化した実装クラスを分割す...
-
インターフェースとは
-
Javaの自作例外クラスについて
-
javaのabstractの意味
-
インターフェース型の使い方が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ラッパークラス」の存在意義...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
抽象クラスをJUNITでテストする...
-
「継承されたメソッドの可視性...
-
インターフェースとトレイトっ...
-
c++でのヘッダーファイルの循環...
-
JavaでのAPIの覚え方ってみさな...
-
(vba)他のアプリケーションの右...
-
ASP.NETでの共通コードの書き方...
-
なぜForm型にキャストするので...
-
vb.net 自作プロパティの削除に...
-
【C#】クラスのコンストラクタ...
-
委譲って何ですか?
-
interface,extend,implementの...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
Commons-Discovery.jarとは?
-
JTextFieldの入力制限
-
C#からDLLを呼びたいのですが・...
おすすめ情報