EDIT: Этот вопрос не об операторах поразрядными и не может быть решен с Why are XOR often used in java hashCode() but another bitwise operators are used rarely?хеширования составные объекты
Я видел различные подходы для хеширования расчета объекта:
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, этот вопрос больше связан с математикой и вероятностями.
Как правило, используйте только функции lib. Если вы не собираетесь использовать анализ распределения вероятности, чтобы определить, как наилучшим образом распределяются ваши точки данных. Вы находите много столкновений с вашим набором данных? – CodeMonkeyForHire
http://stackoverflow.com/questions/2334218/why-are-xor-often-used-in-java-hashcode-but-another-bitwise-operators-are-used – assylias
Джош Блох обсуждает реализацию хорошего хеш-кода в * Эффективная Java *. –