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