問題タブ [compareto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
6 に答える
25691 参照

java - パラメータ文字列が null の場合、int compareTo() は何を返す必要がありますか?

入力パラメーターが null の場合、compareTo() は NullPointerException をスローする必要があると言われています。ただし、フィールドを String 型と比較する必要があるクラスを実装しています。これらのフィールドは必須ではありません。この場合気になるのは、

1) 入力が null の場合、何を返す必要がありますか? null 以外の文字列は辞書的に null より大きいか小さいか?

2) これが悪い習慣と見なされる場合、それを裏付ける議論はありますか? 代わりに空の文字列を使用するようユーザーに強制する必要がありますか? 空の文字列を使用すると、フィールドが適用されない場合とフィールドが空の場合が混同されませんか? また、例外をスローする必要がある場合は、マニュアルでユーザーに警告する以外に、他に何ができる/すべきでしょうか?

編集:ここでは明確に表現できないかもしれませんが、実装しているプログラムでは、null になる可能性のある文字列はすべてフィールドまたはクラスであり、null であってはなりません。つまり、comparedTo() が使用するオブジェクトを null にすることはできず、プライベート フィールドのみを null にすることができます。したがって、この場合、compareTo() を適切に実装すれば、null フィールドを持つクラスは常に同じと見なされるため、推移的な要件に違反しないと思います。私は正しいですか、それともこれを間違って解釈していますか?

答えてくれてありがとう!

0 投票する
3 に答える
6789 参照

java - 1 つのパラメーターを使用して Java で compareTo メソッドを作成する

compareToJavaで関数を作ることについて質問があります。

Java にはString.compareTo(String)メソッドがあります。

compareToただし、次のように、パラメーターのみを持つ関数を作成する必要がありますcompareTo(String)

これを使用して別の文字列を保持する必要があると思います。

例えば:

これは正しい考えですか?

最初の単語を保持して 2 番目の単語と比較するには、get 関数と set 関数を作成する必要がありますか?

ありがとう

0 投票する
3 に答える
3621 参照

java - PriorityQueues の compareTo と equals

私は少し混乱しています。Javadoc の警告。PriorityQueue が必要なものかどうかさえわかりません...

私の状況は次のとおりです。整数のタイムスタンプとその他のフィールドを持つクラス Event があります。これらのイベントを挿入でき、イベントをタイムスタンプでソートできるデータ構造を探しています。異なるイベントが同じタイムスタンプを持つ可能性があるため、正しく理解できれば、compareTo と equals は矛盾します。

私の最初のアプローチは、Event に Comparable を実装させ、compareTo を次のように提供することでした。}

これをどのように解決すればよいのかわかりません。カスタム Comparator を作成することを考えましたが、奇妙な動作に関する同じ警告が Comparator の javadoc にも表示されます。イベントの複数の等しいインスタンスを挿入したくありません。それらをタイムスタンプでソートしたいだけです。

よろしくお願いします:)

編集:
イベントをタイムスタンプでソートしたいだけです。2 つの異なるイベントのタイムスタンプが同じである可能性は十分にあります。したがって、compareTo は 0 を返します。これは、タイムスタンプが同じであり、並べ替えの目的で等しいためです。しかし、これらは異なるイベントであるため、equals() は true を返しません。
よくわかりませんが、PriorityQueue を使用するのが適切です。SortedSet を見ましたが、compareTo と equals の一貫性について同じ警告がありました。
多分私はこれに間違った角度から取り組んでいます、わかりません...

0 投票する
2 に答える
170 参照

.net - CompareTo on short がこのように実装されているのはなぜですか?

次のコードを検討してください。

私の質問は、Int16 の CompareTo メソッドが -1、0、1 以外の値を返す特定の理由はありますか?

ILSpy は、この方法で実装されていることを示しています

一方、メソッドはこのように Int32 に実装されています

0 投票する
3 に答える
4655 参照

java - Java Comparable、複数/異なる compareTo() メソッドの実装

私はこのクラスを持っています:

compareTo()フラグが設定されているかどうかに応じて、さまざまなクラス プロパティを使用して動作またはソートしたい。

したがって、プロパティを使用しflag == 1たい場合は、現在メソッドにあるものは何でもです。compareTo()cflag == 0

つまり、同じクラスを異なる方法でソートします。

これを達成する方法がわかりません。助けてください。

また、私の側からさらに情報が必要な場合はお知らせください。

0 投票する
4 に答える
139933 参照

java - BigDecimal equals() と compareTo()

簡単なテストクラスを考えてみましょう:

(意識的に)x等しいy(オブジェクト参照ではない) と言うことができますが、プログラムを実行すると、次の結果が表示されます。

質問:が と等しいと判断できるcompareTo()equals()の違いは何ですか?BigDecimalcompareToxy

PS: BigDecimal にはinflate()メソッド オンequals()メソッドがあることがわかりました。inflate()実際には何をしますか?

0 投票する
3 に答える
695 参照

java - compareTo内の「public」スコープでアクセス可能なプライベートインスタンス変数

不思議なことに、インスタンス変数brandはプライベートスコープですが、メソッド内の「パブリック」な方法でアクセスできますcompareTo

0 投票する
3 に答える
264 参照

java - Long / String compareTo()に介入するにはどうすればよいですか?

Comparableオブジェクトを格納するデータ構造を実装するクラスがあります。一部のインスタンスはLongsおよびその他のStringsを保持します。

データ構造クラスやアプリケーションをあまり変更せずに、発生した比較の数を数えたいです。

1つの自然なアイデアは、compareTo()が統計カウンターをインクリメントしてから実際のcompareTo()を呼び出す新しいクラス(たとえばMyLong)を実装することです。次に、Longsなどの代わりにMyLongsを保存するようにアプリを変更します。LongまたはStringから継承できないため、これは機能しません。

このアプローチを機能させることはできますか?この目標を達成する別の方法はありますか?

0 投票する
1 に答える
7725 参照

java - 文書化されていないString.compareTo(null)NPE?

次の小さなテストはNPEをスローします。

ただし、 compareTo()のJavadocには、パラメーターを。にすることはできないとは記載されていませんnull。Javadocsは通常、パラメータを設定できない場合に言及しているため、これは奇妙なことnullです。

これはドキュメントの単なる不具合ですか、それとも私が見逃しているより根本的な理由/ねじれがありますか?

0 投票する
6 に答える
16774 参照

java - compareTo()が0を返す場合、オブジェクトが等しいと暗示されるのはなぜですか?

クラスを作りましょうPerson。人には名前と身長があります。

EqualsおよびhashCode()は、名前のみを考慮します。人は同等です(または、コンパレータを実装します。どちらでも構いません)。人は身長で比較されます。

2人の異なる人が同じ身長を持つことができる状況を予想することは合理的であるように思われますが、例えば。TreeSetは、comapareTo()== 0のように動作します。これは、単に同じサイズではなく、等しいことを意味します。

これを回避するために、サイズが同じである場合、比較は二次的に他の何かを調べることができますが、同じサイズの異なるオブジェクトを検出するために使用することはできません。

例:

結果:

なぜそうなのか分かりますか?