У меня есть векторный класс с реализованным hashCode (). Это не было написано мной, но использует 2 простых числа, на которые нужно умножить 2 векторных компонента перед их XOR. Вот оно:
/*class Vector2f*/
...
public int hashCode()
{
return 997 * ((int)x) ^ 991 * ((int)y); //large primes!
}
... Поскольку это из установленной библиотеки Java, я знаю, что она работает просто отлично.
Тогда у меня есть класс Boundary, который содержит 2 вектора: «начало» и «конец» (представляющих конечные точки линии). Значения этих двух векторов являются тем, что характеризует границу.
/*class Boundary*/
...
public int hashCode()
{
return 1013 * (start.hashCode()) ^ 1009 * (end.hashCode());
}
Здесь я попытался создать хороший hashCode () для уникального набора из двух векторов (начало и конец), составляющих эту границу. Мой вопрос: эта реализация hashCode () будет работать?
(Обратите внимание, что я использовал 2 разных простых числа в последней реализации hashCode (); я не знаю, нужно ли это, но лучше быть безопасным, чем сожалеть, пытаясь избежать общих факторов, я думаю - поскольку предположим, что именно поэтому простые числа популярны для хеш-функций.)