問題タブ [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 投票する
2 に答える
423 参照

c# - カスタムの GetHashcode 実装により、Dictionary または Hashtable の「バケット」で問題が発生する可能性があります

特定のオブジェクトに独自のカスタム ハッシュコードを実装することを検討しています...これをkey辞書として使用します。2 つのオブジェクトが同じハッシュコードを持つ可能性がある (可能性が高い) ため、どの追加の演算子をオーバーライドする必要があり、そのオーバーライドは (概念的に) どのように見えるべきでしょうか?

言い換えれば、一意性とオブジェクトを配置するバケットを決定するために、ディクショナリは次の組み合わせを使用しますか?

どれが他のものよりも重要ですか?

  • ハッシュコード
  • 等しい
  • ==
  • CompareTo()

compareTo は SortedDictionary でのみ必要ですか?

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

java - CompareToとEquals!文字列またはオブジェクトを比較しますか?

速い質問

文字列を比較していますが、equalsまたはcompareToを使用する必要がありますか?私は等しいので、値だけでなく文字列型の2つのオブジェクトを区別します...

次の理由で問題が発生する可能性があります。

同じ値であっても、2つの異なるオブジェクトはありますか?

パフォーマンスと精度の点で、equalsとcompareToの実装の正確な違いは何ですか?

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

java - いつ何を含めるのですか?

Personキーボードから入力した人の名前と姓を保持するクラスを(本にあるように)作成しました。次にPhoneNumber、国コード、市外局番、および人の番号を文字列としてカプセル化する別のクラスがあります。
Personは、ハッシュマップのキーとして使用されることを目的としています。
クラスはとの両方をBookEntryカプセル化します。多くのオブジェクトが、電話帳を表すHashMapを構成しています。PersonPhoneNumberBookEntry

PersonComparable<Person>メソッドを含むように実装しますCompareTo(Person)。後で本はequals(Object anotherPerson)方法を追加します。
私の質問は、CompareTo2つのキーを比較するのに十分な方法ではないかということです。それとも、HashMap <>の内部メカニズムでは、equals()2つのキーを比較するためのメソッドを含める必要がありますか?
compareTo()

equals()

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

java - CompareTo オーバーライド並べ替え

compareTo メソッドのオーバーライドに問題があります。このプログラムはさまざまな従業員タイプをシミュレートし、従業員タイプで完全にソートしていますが、総賃金で二次ソートすることはできません。クラス名/従業員タイプで並べ替えたら、ヘルパー メソッドで取得できる GrossPay で並べ替える必要があります。以下はコードです:

従業員の配列リストで Collection.sort() を使用しています。印刷すると、従業員の種類別に並べ替えられた優れたリストが得られますが、その後は総支払額で並べ替える必要があります。

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

c# - listbox.sort と string compareto-function の小さな問題

リストボックスがその要素と CompareTo 関数を並べ替える方法の違いに問題があります。

問題は、私は 2 つのリストボックスを使用しており、そのうちの 1 つにのみ発生する要素の 2 つのリストを作成しようとしていることです。両方のリストボックスは、sorted プロパティを使用して並べ替えられます。

私のプログラムはリストボックスを実行し、CompareTo 関数を使用して要素を 1 つずつ比較します。

これで、「Donald's Pizza」のように、アポストロフィ (') を含むアイテムを除いて、すべて正常に動作します。

ソートされたリストボックスでは、「Donald's Pizza」が「Donald Duck」の前に表示されます。アポストロフィはスペースよりも小さいです。しかし、CompareTo 関数を使用すると、"Donald's Pizza" は "Donald Duck" より大きくなります。"CompareTo" は、アポストロフィはスペースより大きい!

これは私のシステムを台無しにします。

これが問題の原因となっているアポストロフィだけだとわかっていれば、簡単に回避策を講じることができましたが、他の文字にも適用できるかどうかはわかりません。

解決策として、リストボックスに独自のソート手順を作成する必要がありますが、明らかなことを見落としているだけですか?

編集:答えてくれてありがとう。

CompareTo 関数に基づいて、独自のソート手順を作成することになりました。このようにして、リストボックスの種類は、後で使用する CompareTo 関数と 100% 等しいと確信しています。

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

java - Java の comapareTo メソッドはどのように機能しますか?

次のコードがどのように機能するかを説明できる人はいますか?

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

java - TreeMap の内容を比較すると間違った答えが返される

TreeMap を別の TreeMap 内の「キー」として使用します

すなわち

私のコードでは、「オブジェクト」は個人的な構造ですが、この例では文字列を使用しています。

TreeMap.CompareTo()メソッドとメソッドをテストするために、TreeMap のペアを作成しましたTreeMap.HashCode()。これは次から始まります...

ここから英語のアイテムを呼び出して、キーが含まれているかどうかを確認します

ただし、HashMap と TreeMap の両方が AbstractMap 親の同じ HashCode() メソッドを指していることに注意してください。

私が最初に考えたのは、TreeMap を HashMap に変換することでしたが、これは少し面倒に思えました。そこで、hashCode() メソッドを 2 つのツリーマップ オブジェクトに適用することにしました。

以下を印刷します

私にとっては、キー値が異なるため、ハッシュコードは異なるはずです。HashMap と TreeMap の間の hashCode() メソッドの実装の違いに関する詳細を見つけることができません。

以下の方はご遠慮ください。キーのみを HashMap に変更しても、ClassCastException エラーは停止しません。すべてのマップを HashMap に変更します。TreeMap の containsKey() メソッドに何か問題があり、それが正しく機能していないか、私が誤解しています - 誰か説明してもらえますか?

最初と 2 番目のマップ オブジェクトの hashCode を取得するセクションでは、常に同じ出力が生成されます (ここでハッシュまたはツリー マップを使用するかどうかに関係なく)。 HashMaps が使用されるため、compareTo() メソッドとは異なる HashMap 実装に明らかに何かがあります。

私の主な質問は次のとおりです。

TreeMap オブジェクトで使用するキーの種類の詳細はどこで確認できますか (将来の 'ClassCastException' エラーを防ぐため)。

特定のタイプのオブジェクトをキーとして使用できない場合、そもそもそれをキーとして TreeMap に挿入できるのはなぜですか? (確かに挿入できれば、キーが存在するかどうかを確認できるはずですか?)

私の TreeMap キーオブジェクトを置き換えるために inster/retrieve を注文した別の構造を誰かが提案できますか?

または、奇妙な動作を発見した可能性があります。私の理解では、HashMap の代わりに TreeMap をドロップインできるはずですか、それともフリンジ シナリオに出くわしましたか?

コメントありがとうございます。

デビッド。

ps。個人用ユーティリティを使用して、キーと値のペアに依存するハッシュを作成するため、問題は私のコードの問題ではありません (つまり、キー ハッシュ値を値ハッシュ値とは異なる方法で計算します...混乱を招く場合は申し訳ありません文!) hashCode メソッドは、項目がキーであるか値であるかを考慮せずに、すべての値を合計するだけであると想定しています。

pps。これが良い質問かどうかわかりませんが、それを改善する方法についての指針はありますか?

編集。

応答から、人々は私がある種の派手な言語辞書のことをしていると思っているようですが、私の例からの驚きではありません。私はこれを例として使用しました。なぜなら、それは私の頭に簡単に浮かび、書くのが速く、私の質問を実証したからです.

本当の問題は次のとおりです。

私は従来の DB 構造にアクセスしていますが、何ともうまく通信しません (結果セットが前方および後方読み取り可能でないなど)。そこで、データを取得して、そこからオブジェクトを作成します。最小のオブジェクトは、テーブル内の 1 つの行を表します (これは、上記の例で文字列値 'english' または 'french' を使用したオブジェクトです。

これらの行オブジェクトのコレクションがあり、各行には明らかなキーがあります (これは、関連する行オブジェクトを指す TreeMap です)。

それが物事をより明確にするかどうかはわかりません!

2を編集します。

オリジナルの使用方法の選択について、もう少し詳しく説明する必要があると感じています

私のデータ構造の場合、TreeMap に変換して順序付けられたビューを取得します。

編集 1 で、レガシー DB はうまく動作しないと言いました (これは JDBC.ODBC の問題であると思われます。DB と通信するために JDBC を取得するつもりはありません)。真実は、Java「dataObject」を作成するときに、データにいくつかの変更を適用することです。つまり、DB は結果を昇順または降順で吐き出す可能性がありますが、dataObject に挿入された順序を知る方法はありません。likeHashMap を使用することは良い解決策のように思えますが (duffymo の提案を参照)、後でデータを連続的にではなく、順序付けられた方法で抽出する必要があります (LinkedHashMap は挿入順序のみを保持します)。他の 2 つのアイテムの間に新しいアイテムを挿入する必要があるときにコピーを作成する場合、TreMap がこれを行います... しかし、キーの特定のオブジェクトを作成すると、メンバーとして TreeMap が含まれるだけになるため、compareTo メソッドと hashCode メソッドを指定する必要があることは明らかです。では、TreeMap をエクステントするだけではどうですか (ただし、Duffymo はそのソリューションを破棄することにポイントがあります)。

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

java - compareTo メソッドを使用して 2 つの異なるデータ型を比較す​​る

Set を実装するクラス WordCount がありますが、Word クラスからメソッドを取得する WordCount クラスで comareTo メソッドを使用するのに問題があります。Word オブジェクトと String オブジェクトを比較しようとしていますが、最終的に Word も String であるため、エラーが発生するのはなぜですか?

単語クラス

compareTo メソッドを使用すると、このクラスでエラーが発生します

0 投票する
7 に答える
16612 参照

java - Java:compareToメソッドを使用して2つのノードの順序を確認する方法

私はプログラミングの割り当てに取り組んでおり、compareToメソッドを理解するのに役立つ可能性があります。

割り当ての問題の1つは、着信要素をリストに追加することです。リストがソートされている場合、新しいノードを正しい位置に配置することになっています。リストは、昇順または降順で並べ替えることができます。ヘッドノードと(node.getNext())の後のノードを比較することで、どちらの順序かを確認できると思いましたが、よくわかりません。よくわからないコード行は次のとおりです。

headは最初のノードであり、すでに追加されているジェネリックデータ型Tです。tpはスペースを節約するためだけにhead.getNext()であり、ジェネリックデータ型Tでもあります。これは、もう一度入力することになると確信しているためです。教授から、compareToメソッドを呼び出して別のジェネリックデータ型を比較す​​るだけだと言われたため、プログラムにcompareToメソッドを記述しませんでした。また、次の違いについてもわかりません。

しかし、割り当てでは、最初のものを使用する必要があります。

ヘッドノード要素が1で、次の要素が3の場合、ifステートメントの出力はどうなりますか?正しいか間違っているか?

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

java - きれいにオーバーライド可能な compareTo() メソッド?

初めて、関連するオブジェクト間の関係を定義しなければならなかったため、 と の完全にオーバーライド可能な実装に関する情報を求めて、週末全体を Web で探し回っていることに気付きましequals()compareTo()。役立つ情報がほとんど見つからなかったので、解決策を見つけることにしました。以下は、その解決方法の表れであると思いますcompareTo()。私は、同様の手法がこの方法でも機能する可能性があると考えていequals()ます。

私より賢い誰かが、これらの調査結果を検証し、遭遇する可能性のある落とし穴に関するフィードバックを提供する時間をとってくれることを願っています.