質問: 複合オブジェクトをハッシュする *EDIT:* This question is not about bitwise operators and can't be answered with [Why are XOR often used in java hashCode() but another bitwise operators are used rarely?](https://stackoverflow.com/questions/2334218/why-are-xor-often-used-in-java-hashcode-but-another-bitwise-operators-are-used?lq=1) オブジェクトのハッシュ計算にはさまざまなアプローチがあります。 ``` class A { public B b; public C c; @Override public boolean equals(); @Override public int hashCode() { return c.hashCode() ^ b.hashCode(); //XOR return c.hashCode() + prime * b.hashCode();//SUM return Objects.hash(b,c);//LIB } } ``` LIBメソッドはSUMを使用しているようですが、なぜXORより優れていますか? この例はJavaで書かれていますが、この問題は数学と確率に関するものです。
回答: 答えは(いつものように)です: "*依存する*"これはあなたのクラスによって異なります。 たとえば、 ``` class X { T a, b; X(T _a, _b) { a = _a; b = _b } } ``` `+` 、 `*` 、または `^` のような対称演算子を使用しないでください( `T` は `int `X(1,2)`と `X(2,1)`をハッシュしています。 3つの "解"(xorまたはハッシュ値)が悪いです。` `T` が複合型の場合、参照のみが考慮されるため、3番目の解決策( `Objects.hash()`)も悪い可能性がありますコード)。