J'ai trouvé des questions similaires, mais aucune d'entre elles ne m'a vraiment aidé jusqu'à présent (ce qui signifie probablement que je fais quelque chose de mal, c'est pourquoi je suis ici).Utilisation de l'instance d'un objet comme clé HashMap
J'ai un HashMap Map<Integer, List<Book>>
qui est censé avoir un comme la clé de ID
Student
et la liste des Book
qu'il a en sa possession la valeur. Bien que ne passant que le ID
fonctionne comme la clé, je pense que ce n'est pas une approche assez orientée objet et que je devrais utiliser Student
comme la clé (donc cela ressemblerait à: Map<Student, List<Book>>
). J'ai essayé de l'utiliser, mais ensuite j'ai eu un tas d'erreurs quand j'ai essayé de retourner une liste Student
donnée de Book
, probablement parce que le Student
n'a pas été trouvé. Mon professeur m'a suggéré de @Override
les méthodes Java hashCode
et equals
, ce qui est logique, puisque c'est comme ça que HashMap
compare les clés, mais je n'ai pas eu de succès là-dessus (je ne sais pas exactement ce que j'ai besoin de comparer pour voir si deux Student
sont les mêmes, soi-disant, leur ID
devrait fonctionner seul). Voici les méthodes substituées:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
Qu'est-ce que je fais mal? Toute lumière que vous pourriez jeter sur ce serait extrêmement utile. Merci d'avance!
L'erreur est ailleurs. Publier un exemple minimal complet reproduisant le problème. –
'if (id! = Other.id) return false; return true; 'Pourquoi avez-vous préféré cela à' return id.equals (other.id); '? –