問題タブ [hashcode]

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 投票する
3 に答える
5480 参照

java - Java オーバーライド hashCode() は StackOverflowError を取得します

したがって、私は hashCode のオーバーライドに精通しておらず、hashCode メソッドで何らかの形で無限再帰が行われているようです。

これが私のシナリオです。システム内の重複オブジェクトをチェックするキャッシュ オブジェクトであるクラス DuplicateCache があります。Duplicate オブジェクトを表す静的内部クラス Duplicate があります。

DuplicateCache は HashMap を保持して、そのすべてのエントリを追跡します。各エントリは、キーとしての Duplicate オブジェクトと値としての Long オブジェクトで構成されます。

Duplicate オブジェクト キーを使用してすべての操作を実行しています。HashMap に put メソッドを実行すると、Duplicate オブジェクトの hashCode() メソッドで無限再帰が発生します。

重複する hashCode() メソッドは、オーバーライドする必要があった別のクラスの hashCode を呼び出すため、後でそれを含めます。

これ以上苦労することなく、問題のある Duplicate クラスのコードを次に示します。

これは Duplicate オブジェクト、今度は MagicPrice hashCode() メソッドに対して行います:

このクラスでは、値フィールドは BigDecimal であり、iso4217code は String です。その価値のために、stackTrace は最終的に BigDecimal hashCode() メソッドで停止しますが、BigDecimal hashCode() メソッドが壊れるとは思えません。

この hashCode() オーバーライドについて何が欠けているのか、誰か説明してもらえますか? この動作を生成するには、何か間違ったことをしているに違いないことを知っています。

ログファイルからのスタックトレースは次のとおりです。

また、そのトレースは独自の get メソッドを参照しているため、次のようになります。

expire() は、テーブル内の古いエントリを時間ベースで削除するメソッドです。ハッシュ テーブルは HashMap オブジェクトです。

ありがとう!

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

java - hashCodeとequalsメソッドを実装する方法

Javaで次のクラスをhashCode()どのように実装する必要がありますか?equals()

0 投票する
12 に答える
18722 参照

java - hashCode() がオーバーライドされていない場合、オブジェクトのハッシュ コードは何ですか?

hashCode() メソッドがオーバーライドされていない場合、Java の任意のオブジェクトで hashCode() を呼び出した結果はどうなりますか?

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

c# - .NETディクショナリは衝突をどの程度解決しますか?

テーブルにキーを設定する必要があるカスタムオブジェクトに問題があります。一意の数字キーを生成する必要があります。衝突の問題が発生しているので、辞書を利用して支援できるかどうか疑問に思っています。私がこのようなオブジェクトを持っていると仮定します:

など、より多くのフィールドがあります。FooとBarが私のキーフィールドだとしましょう。2つのThingys間で等しい場合、2つのオブジェクトは等しいと見なす必要があります(一方が他方の更新を表し、Othersフィールドが更新されている場合があります)。

したがって、これはほとんどの部分で機能しますが、実際には異なる2つのThingysが同じハッシュコードを持っている場合はまれです。

私の質問はこれです:<Thingy, intThingysを入れた辞書を使用して、辞書から出てくるシーケンシャル値を実際のキーとして使用できますか?ディクショナリが、まれなハッシュコードの衝突を検出したときに、Equalsメソッドを呼び出して、オブジェクトが実際に異なると判断し、それらを異なる方法で格納するかどうか疑問に思っています。イメージングしてから検索すると、そのハッシュのバケットが表示され、比較のためにEqualsを使用して、正しいThingyが検索されます。

これは辞書の場合ですか、それともハッシュコードが異なるが(ハッシュ%サイズ)が同じである衝突のみを解決しますか?これがうまくいかない場合は、どうすればよいですか?

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

java - Sun が String.hashCode() 実装を指定したのはなぜですか?

String.hashCode()技術的に言えば、仕様 (Javadoc) によって保証されているため、の現在の実装に依存することが安全かどうかについては、進行中の議論があるようです。

  1. SunString.hashCode()が仕様で の実装を指定したのはなぜですか?
  2. 開発者が hashCode() の特定の実装に依存する必要があるのはなぜですか?
  3. String.hashCode()太陽が将来変わると空が落ちることを恐れているのはなぜですか? (これはおそらく#2で説明されています)
0 投票する
31 に答える
544011 参照

java - Java で equals メソッドと hashCode メソッドをオーバーライドする必要があるのはなぜですか?

最近、この Developer Works Documentを読みました。

hashCode()このドキュメントは、効果的かつ正確に定義することに関するものequals()ですが、これら 2 つのメソッドをオーバーライドする必要がある理由がわかりません。

これらのメソッドを効率的に実装するための決定を下すにはどうすればよいですか?

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

hashcode - HashCode、単語または数字の最後の数文字を取得しようとしています

Eclipse で実装しようとしているこの hashCode 関数がありますが、テストが失敗し続けます。単語または数値の最後の 2 文字または 3 文字を返す Hashcode 関数を作成しようとしています。これが私の現在のコードです:

これが私のJunitテストです:

テストを実行するたびに失敗し、次のように示されます。

期待されていましたが、次のとおりでした: <96727>

今、私はこの関数がWordまたはNumberのいずれかを取り込んで、取り込まれたオブジェクトの最後の2文字または3文字を返すことを本当に望んでいます.hashCodeを使用してこれを行う方法を知っている人はいますか. どんな助けでも大歓迎です

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

hashtable - ハッシュテーブルに関するいくつかの質問

私はハッシュテーブルとCでの実装方法についてたくさん読んでいますが、頭の中にはほとんどすべての概念があるので、自分でコーディングを開始できると思います。まだいくつか質問があります。正しく理解します。

参考までに、私はこれを読んでいます:http: //eternallyconfuzzled.com/jsw_home.aspx

1)上記のサイトで読んだように、ハッシュテーブルのサイズには2の累乗または素数をお勧めします。これは基本的に配列であり、配列のサイズは固定されているため、探している値をすばやく検索できます。大きな入力がある場合は収まらないため、小さな配列を宣言できません。また、入力データがそれほど大きくないためにメモリが無駄になるため、非常に大きな配列を宣言できません。

ハッシュテーブルの最適なサイズはどれくらいですか?何に基づいて決定する必要がありますか?

2)また、そのサイトには、まだすべてを読んでいないハッシュ関数がいくつかあります。また、よく知られたアルゴリズムを使用し、独自のアルゴリズムを使用することが常に最善であるとも述べています。そして、私はまさにそれを行うかもしれません。そのサイトから1つを選び、コードでテストして、入力データに基づいて衝突が最小限に抑えられるかどうかを確認します。

私を悩ませているのは、ハッシュ範囲をどのように制御するかです。ハッシュを返すことができず、ハッシュテーブルのサイズよりも大きい整数を返すことができません。そうしないと、深刻な問題が発生します。どうすればこれに対処できますか?

0 投票する
9 に答える
12112 参照

java - String の hashCode() が 0 をキャッシュしないのはなぜですか?

String の Java 6 ソース コードで、hashCode が 0 以外の値のみをキャッシュしていることに気付きました。パフォーマンスの違いは、次のスニペットで示されています。

これを ideone.com で実行すると、次の出力が得られます。

だから私の質問は:

  • String の hashCode() が 0 をキャッシュしないのはなぜですか?
  • Java 文字列が 0 にハッシュされる確率は?
  • 文字列が 0 にハッシュされるたびにハッシュ値を再計算するというパフォーマンスの低下を回避する最善の方法は何ですか?
  • これは値をキャッシュするベストプラクティスの方法ですか? (つまり、1 つを除いてすべてをキャッシュしますか?)

お楽しみに、ここの各行は 0 にハッシュされる文字列です。

0 投票する
5 に答える
1064 参照

java - ハッシュコード比較の問題

この場合、ルールと呼ばれるオブジェクトのリストがあります。このオブジェクト自体は、システムでルールを複製できないため、ハッシュコード比較を行う必要があるフィールドのリストです。

つまり、フィールド A と B を持つ 2 つのルール R1 と R2 があるとします。

ここで、R1 の A と B の値がそれぞれ 7 と 2 の場合。

R2 ではそれぞれ 3 と 4 であり、ハッシュコード比較であるシステム内のルールの重複をチェックするために使用したプロセスは失敗します

私が使用した方法は

ここにすべてのルールのハッシュコードを格納する changeableAttrCodes があります。

システム内のルールの重複が見られるだけでなく、この種の問題が今後発生しないように、より良い方法を提案してください。

前もって感謝します