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

java - C++ の HashCodeBuilder

Java で特定のオブジェクトのハッシュを生成したい場合、私が知っている最も簡単な方法は、Apache Commons を使用することですHashCodeBuilder

C++ に似たようなものはありますか?

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

scala - ScalaのBigDecimalはequals/hashCodeコントラクトに違反していますか?

Ordered trait要求に応じて、ScalaのクラスのメソッドequalsBigDecimal順序と一致しています。ただし、ハッシュコードはラップされたものから取得されるだけなjava.math.BigDecimalので、equalsとは矛盾します。

これが既知の問題であるという言及は見つかりません。私は何かが足りないのですか?

0 投票する
11 に答える
7104 参照

c# - object.GetHashCode() を適切にオーバーライドする方法に関する一般的なアドバイスとガイドライン

MSDNによると、ハッシュ関数には次のプロパティが必要です。

  1. 2 つのオブジェクトを比較して等しい場合、各オブジェクトの GetHashCode メソッドは同じ値を返す必要があります。ただし、2 つのオブジェクトが等しくない場合、2 つのオブジェクトの GetHashCode メソッドは異なる値を返す必要はありません。

  2. オブジェクトの GetHashCode メソッドは、オブジェクトの Equals メソッドの戻り値を決定するオブジェクトの状態に変更がない限り、一貫して同じハッシュ コードを返す必要があります。これはアプリケーションの現在の実行にのみ当てはまり、アプリケーションが再度実行されると別のハッシュ コードが返される可能性があることに注意してください。

  3. 最高のパフォーマンスを得るには、ハッシュ関数がすべての入力に対してランダムな分布を生成する必要があります。


私は次のシナリオで自分自身を見つけ続けています: クラスを作成し、実装IEquatable<T>してオーバーライドしobject.Equals(object)ました。MSDNは次のように述べています。

Equals をオーバーライドする型は、 GetHashCode もオーバーライドする必要があります。そうしないと、Hashtable が正しく機能しない可能性があります。

そして、それは通常、私にとっては少し止まります。なぜなら、どのように適切にオーバーライドするのobject.GetHashCode()ですか? どこから始めればよいか分からず、多くの落とし穴があるようです。

ここ StackOverflow では、GetHashCode のオーバーライドに関連する質問がかなりありますが、それらのほとんどは、非常に特殊なケースや特定の問題に関するものであるようです。したがって、ここで適切なコンパイルを取得したいと思います。一般的なアドバイスとガイドラインを含む概要。何をすべきか、何をすべきでないか、よくある落とし穴、どこから始めるべきかなど。

特に C# 向けにしたいのですが、他の .NET 言語でも同じように機能すると思います (?)。


おそらく最善の方法は、トピックごとに 1 つの回答を作成し、最初に簡単で短い回答を作成し (可能であればワンライナーに近いものにする)、次にさらに情報を追加して、関連する質問、ディスカッション、ブログ投稿などで終了することだと思います。 、もしあれば。次に、「目次」だけを使用して、受け入れられた回答として (一番上に表示されるように) 1 つの投稿を作成できます。短く簡潔にするようにしてください。また、他の質問やブログ投稿へのリンクだけにしないでください。それらの本質を理解し、ソースにリンクするようにしてください (特に、ソースが消える可能性があるため)。また、非常によく似た回答をたくさん作成するのではなく、回答を編集して改善するようにしてください。

私はあまり優れたテクニカル ライターではありませんが、少なくとも回答が似ているように書式を設定したり、目次を作成したりします。また、SO で関連する質問の一部を検索して、私が扱えるもののエッセンスを引き出すかもしれません。しかし、私はこのトピックについてあまり安定していないので、ほとんどの場合、近づかないようにします :p

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

java - ハッシュコードの有効性を見つける方法は?

このアプリケーションでは、Javaオブジェクトからハッシュコードを生成し、それをデータベースのあるレベルに格納します。ここで私の質問は、誰かが手動で数値を生成するかどうかです。それがオブジェクトからJVMによって作成された有効なハッシュコードであり、手動で作成されたものではないかどうかを確認する方法はありますか。

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

java - hashCode() を使用した文字列の等価性のテスト

hashCode メソッドを使用して Java 文字列の等価性をテストできない理由はありますか? 基本的に、代わりに....

あなたが使用することができます...

文字列がハッシュコードを計算すると、文字列がハッシュコードをキャッシュするため、文字列を比較するのはintを比較するのと同じくらい効率的であり、文字列が文字列プールにある可能性が高いため、これは便利です仕方。

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

.net - HttpRequest.GetHashCode()の実装-衝突はどのくらいの頻度で発生しますか?

ASP.NETWebサイトで個別のHttpRequestを一意に識別して追跡するための信頼できる方法を見つけようとしています。

HttpRequest.GetHashCode()の実装について誰か知っていますか?具体的には、どのくらいの頻度で衝突が発生しますか?

HashCodesが一意であるとは限らないことを理解しています。私が理解しようとしているのは、統計的に、HashCodeが繰り返されると予想できる頻度です。

私が考えているシステムは、HashCodeの衝突を適切に処理しますが、少なくとも1000分の1程度の一意性があることを確認したいと思います。

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

java - Java - TreeSet と hashCode()

TreeSetコレクションとhashCodeメソッドについて簡単な質問があります。オブジェクトをTreeSet追加する前にTreeSet、メソッドを使用してオブジェクトが存在するかどうかを確認しますcontains

以下の例のように、hashCode メソッドの実装を使用して、それぞれが異なる hashCode を生成する 2 つの異なるオブジェクトがあります。

特定の実行の hashCode は、76126352 および 76126353 です (オブジェクトは、1 つの属性で 1 桁だけ異なります)。

hashCode が異なっていても、contains メソッドはこれらのオブジェクトに対して true を返しています。理由はありますか?これは本当に紛らわしいので、助けていただければ幸いです。

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

scala - Scala で実装された JavaBeans の equals および hashCode メソッドのオーバーライド

iBatis と Java キャッシング ツール ehcache を使用するプロジェクトに取り組んでいますが、Scala でモデル クラスを実装しています。equals メソッドと hashCode メソッドをオーバーライドして、キャッシュでオブジェクトを簡単に管理できるようにする必要があると強く感じています。

scala クラスで必要なプロパティのほとんどは vars であるため、vars に依存し、オブジェクトの比較に効率的な効果的な equals 定義を作成するためのアドバイスが必要です。

コード例をいただければ幸いです。

ありがとう。

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

java - HashMap で String キーを使用するのは悪い考えですか?

String クラスのhashCode()メソッドは、個別の String に対して一意のハッシュ コードを生成することが保証されていないことを理解しています。String キーを HashMap-s に入れる (デフォルトの String hashCode() メソッドを使用する) 使用法が多く見られます。putマップが、以前にマップに配置された HashMap エントリを真に異なる文字列キーで置き換えた 場合、この使用法の多くは、重大なアプリケーションの問題を引き起こす可能性があります。

String.hashCode() が異なる String に対して同じ値を返すというシナリオに遭遇する可能性はどのくらいですか? キーが文字列の場合、開発者はこの問題をどのように回避しますか?