2016-03-27 8 views
1

Wie funktioniert HashSet1.retainAll(HashSet2); hinter den Kulissen?Wie funktioniert HashSet1.retainAll (HashSet2); Hinter den Kulissen arbeiten?

Ich füge Objekte mit identischen Parametern zu zwei verschiedenen HashSet, aber wenn ich das oben genannte verwende, scheint ich nicht das richtige Ergebnis zu erhalten. Es erkennt nicht, dass es tatsächlich dieselben Parameter im Objekt sind.

Ist diese Methode oben die tatsächliche Adresse meiner Objekte in der Menge zu vergleichen?

Wenn ja, wie kann ich stattdessen Parameter der Objekte vergleichen?

Vielleicht überschreiben gleich?

+5

Sie müssen die Methoden 'hashCode' und' equals' überschreiben. – marstran

+0

Danke @marstran, hat super funktioniert. –

+1

Übrigens müssen Sie auch den Vertrag der beiden Methoden erfüllen, damit es wie erwartet funktioniert. Wenn zwei Objekte gleich sind, müssen sie auch den gleichen Hash-Code haben. Wenn jedoch zwei Objekte den gleichen Hash-Code haben, sind sie möglicherweise nicht gleich (aufgrund von Hash-Kollisionen). – marstran

Antwort

0

Ich habe die Methoden hashCode und .equals in meiner Klasse überschrieben, was dazu geführt hat, dass die Methode die richtigen Parameter anstelle der Objektadressen vergleicht. Danke an @marstran für seinen Rat in dieser Angelegenheit.

Verwandte Themen