Das Hauptproblem mit nicht überschreiben beide ist, dass viele Container davon ausgehen, dass beide Methoden die gleiche Strategie verwenden. Die typischen Fälle sind HashMaps. Wenn Sie einen von equals()/hashCode() überschreiben, aber nicht beide (oder sie inkonsistent überschreiben), werden sie wahrscheinlich nicht funktionieren, da sie hashCode() verwenden, um den Bucket zu finden sollte sein, bu dann benutze gleich() um innerhalb dieses Buckets zu suchen. So kann es am Ende nach dem gegebenen Schlüssel im falschen Eimer suchen !. Das ist der Grund, warum Sie manchmal einen Schlüssel nicht finden, wenn Sie ihn erhalten, sondern ihn durch Iterieren über jedes Element finden können: Iterieren verwendet hadhCode() nicht.
Es ist eine ähnliche Argumentation wie, warum sollten Sie nie haben eine hashCode(), die seinen Wert ändert, während das Objekt in einem HashSet/HashMap ist: durch die Zeit, die Sie für Ihr Objekt suchen, hashCode() könnte geändert und Sie in einen falschen Bucket senden.