Java: Nur hashCode in equals () des unveränderlichen Objekts prüfen

7

Ich habe ein unveränderliches Objekt, zum Beispiel einen Knoten im kartesischen Raum. Die Klasse ist unveränderlich, also cache ich die hashCode für sehr schnelles Hashing.

%Vor%

Da hashCode eindeutig ist und von allen Feldern der Klasse abhängig ist und die Klasse Immutable ist, wäre es richtig, nur Node equality basierend auf hashCode zu überprüfen?

%Vor%

Dies gibt alle Komponententests, die ich über die Eigenschaften von equals() und hashCode() geschrieben habe, und ihre Interaktion, aber vielleicht fehlt mir etwas?

Hinweis: Objects.hashCode() und Objects.equal() sind Guava-Klassen, die für die jeweiligen Methoden hilfreich sind.

    
Alexander Karatarakis 18.04.2012, 00:23
quelle

2 Antworten

17

Nein; das wird nicht funktionieren.

Sie haben 2 32 mögliche Hashcodes und 2 192 mögliche Werte.

    
SLaks 18.04.2012, 00:24
quelle
2

Nein, aber ..

Ich denke, du könntest den Hashcode überprüfen, um zu sehen, ob Objekte nicht gleich sind und dort etwas Leistung erzielen:

%Vor%

Natürlich verbessert dies nur die Performance, falls die meisten Ihrer Vergleiche falsch ausfallen. Im Falle gleicher Objekte führt dies zu einer Leistungseinbuße. In Ihrem Beispiel (Vergleich von nur drei Werten) würde ich dies nicht empfehlen.

    
bertvh 05.09.2012 18:10
quelle