У меня есть класс, имеющий два метода: getY() и getX() (это своего рода карта).
Домены Y и X [-1000.0, + 1000.0], и они удваиваются.
Я написал метод хэш-код():Как справиться с переполнением в реализации метода hashCode
@Override
public int hashCode()
{
int hash=(int) (getX()/EPSILON);
hash+= (int) ((1000.0/EPSILON)*getY());
return hash;
}
Где Эпсилон максимальная ошибка переносится.
Но проблема в том, что значения слишком велики, и я получаю переполнение, если X = 1000,0 и Y = 1000,0. Как написать метод hashCode(), который обрабатывает переполнение и все еще может возвращать два хеш-кода для двух разных объектов в каждом случае?
Вы в конце концов собираетесь модерировать размер «Карты», чтобы не получить «IndexOutOfBoundsException»? Если это так, вы можете сделать mod где-нибудь в коде, чтобы предотвратить переполнение. – twain249
Почему вы делите 1000 на epsilon (что я предполагаю действительно небольшое число)? – Luciano
Чтобы отличить объекты, имеющие одинаковые целочисленные координаты, но не одинаковые двойные координаты. (0,0,0,0) отличается от (0.0 + EPSILON, 0.0). –