Что такое hashCode для пользовательского класса, имеющего всего два свойства типа int?

В Java у меня есть класс, который представляет точку с координатами int

public class Point {
    int x = -1;
    int y = -1;

    public Point (int xNew, int yNew) {
        x = xNew; y = yNew;
    }

    public boolean equals (Object o) {
        // no need for (o instanceof Point) by design
        return x == ((Point)o).x && y == ((Point)o).y;
    }
}

Я использую объекты класса Pointкак ключи в HashMapи как элементы в HashSet.

Что было бы лучшим кандидатом на функцию hashCode? Я бы сделал его двойным, чтобы левая часть была x, а правая — y, например: x = 4, y = 12, то hashCodeвозвращает 4.12. Но по реализации он не может быть двойным, только int.

Это не вариант:

public int hashCode() {
    // no need to check for exception parseInt since x and y are valid by design
    return Integer.parseInt(Integer.toString(x) + Integer.toString(y));
}

потому что значения xи yмогут быть слишком длинными, так что вместе они не будут преобразованы.

29
задан Sophie Sperner 31 July 2012 в 14:36
поделиться