Der Sinn von Equals ist dir klar?
Zwei Objekte vergleichen, ob sie die gleichen Werte haben.
Der Hashcode ist sowas ähnliches.
Die Funktion liefert ein int zurück.
Wenn zwei Objekte verschiedene Zahlen als Hashcode zurückgeben, bedeutet das, dass sie Equals-mäßig nicht gleich sind.
Wenn zwei Objekte aber den gleichen Hashcode haben, bedeutet das, sie könnten gleich sein.
Um sicher zu gehen, braucht man dann noch Equals.
Der Sinn davon:
Bei komplexen Klassen, bei denen viel zu vergleichen ist, dauert Equals länger als ein Vergleich zwischen zwei int.
Bei einem einzelnen Objekt ist das in der Regel egal, bei Mengen wie zB 100000 kann das aber in die Zeit gehen, alle miteinander zu vergleichen.
Deshalb gibt man der Klasse noch eine (schnellere) Hashcode-Methode, die nur einen Teil der zu prüfenden Sachen vergleicht und so sagen kann, ob die Objekte schon sicher verschieden sind oder ob sie eventuell gleich sind und sich ein Equals lohnt.
Spart Zeit und Rechenleistung.
Gruß