問題タブ [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.
java - hashCode() が equals() と一致していることを確認するには?
java.lang.Object の equals() 関数をオーバーライドする場合、javadoc は次のように提案しています。
通常、このメソッドがオーバーライドされるときは常に、hashCode メソッドをオーバーライドする必要があります。これは、等しいオブジェクトには等しいハッシュ コードが必要であるという、hashCode メソッドの一般的な規約を維持するためです。
hashCode() メソッドは、オブジェクトごとに一意の整数を返す必要があります (これは、メモリ位置に基づいてオブジェクトを比較する場合に簡単に実行できます。オブジェクトの一意の整数アドレスを返すだけです)。
各オブジェクトのプロパティのみに基づいて一意の整数を返すには、hashCode() メソッドをどのようにオーバーライドする必要がありますか?
c# - C# の GetHashCode ガイドライン
Essential C# 3.0 and .NET 3.5 book を読みました:
オブジェクトのデータが変更された場合でも、GetHashCode() の戻り値は、特定のオブジェクトの存続期間にわたって一定 (同じ値) である必要があります。多くの場合、これを強制するためにメソッドの戻り値をキャッシュする必要があります。
これは有効なガイドラインですか?
.NET でいくつかの組み込み型を試しましたが、このように動作しませんでした。
java - equals()が複数の独立したフィールドに基づいている場合のhashCode()メソッド
どちらかが等しい場合、このタイプのオブジェクトは等しいと見なされるように、2つのフィールドに基づいて等しいクラスがあります。このようなequals()のhashCode()関数を記述して、equalsがtrueを返すときにhashCodeが等しいという一般的なコントラクトが保持されるようにするにはどうすればよいですか?
このクラスのhashCode()関数を作成するにはどうすればよいですか?そして、私はここで次のような定数を返すという些細なケースを避けたいと思います。
java - 非常に単純なクラスに `hashCode()` を実装する
フィールド メンバーが 1 つだけの非常に単純なクラスがあります (例: String)。hashCode()
単純に返すように実装しても問題ありfieldMember.hashCode()
ませんか? または、フィールドのハッシュ コードを何らかの方法で操作する必要がありますか? また、それを操作する必要がある場合、それはなぜですか?
floating-point - イプシロンでフロートのハッシュコードを取得する方法はありますか?
通常、 float を で比較する==
のは間違いであることはよく知られています。3D ベクトル クラス (float コンポーネント X、Y、Z) では、距離がゼロと見なされる場合、2 つのベクトルは等しいと見なされます。
これまでのところ、すべてうまくいきました。ただし、ベクターのハッシュコードを取得したいと思います。hash = (int)X^(int)Y^(int)Z
のようなものは必ず失敗することがわかります。
私が思いついた最高のものは次のとおりです。
もちろん、これはちょっと面倒です。妥当なハッシュコードを取得する方法はありますか? NaN やその他の特別な値は可能ですが、それが重要な場合はほとんどありません。
java - toString()とhashCode()がオーバーライドされたときに、Javaでオブジェクトの「オブジェクト参照」を取得するにはどうすればよいですか?
デバッグ目的で Java のオブジェクトの「オブジェクト参照」を出力したいと考えています。つまり、状況に応じてオブジェクトが同じ (または異なる) ことを確認します。
問題は、問題のクラスが別のクラスから継承されていることです。このクラスは、通常は ID を提供する toString() と hashCode() の両方をオーバーライドしています。
状況例: マルチスレッド アプリケーションを実行していて、(開発中に) すべてのスレッドがリソース オブジェクトの同じインスタンスを使用しているかどうかを確認したい場合。
c# - ジェネリック配列を含むオブジェクトの GetHashCode オーバーライド
次の 2 つのプロパティを含むクラスがあります。
私はそれを作り、次IEquatable<T>
のようにオーバーライドしましたobject.Equals
:
オーバーライドするときは、もちろんobject.Equals
オーバーライドする必要がありますGetHashCode
。しかし、どのコードを実装する必要がありますか? ジェネリック配列からハッシュコードを作成するにはどうすればよいですか? そして、どうすればそれをId
整数と組み合わせることができますか?