Qu'est-ce que le hashCode pour une classe personnalisée deux int propriétés?

En Java, j'ai une classe qui représente un point de l'int coordonnées

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;
    }
}

Je suis en utilisant les objets de la classe Point comme clés dans un HashMap et en tant qu'éléments dans un HashSet.

Quel serait le meilleur candidat pour le hashCode fonction? Je voudrais faire le double de sorte que la partie de gauche est x et la partie droite est y, par exemple:
x = 4, y = 12, puis le hashCode retourne 4.12. Mais par la mise en œuvre, il ne peut pas être double, seulement int.

Ce n'est pas une option:

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));
}

parce que les valeurs x et y peut être trop long, afin qu'ensemble, ils ne seront pas convertis.

  • int hashCode dit de retour pour le hashcode de la méthode est de type int seulement, donc double est exclue.
  • Oui, c'est pourquoi je suis restée un certain temps.