Wie finde ich Duplikate in einem ArrayListObject?

8

Das ist eine ziemlich häufige Frage, aber ich konnte diesen Teil nicht finden:

Angenommen, ich habe diese Array-Liste:

%Vor%

Jetzt muss ich Duplikate auf der Basis von age in MyDataClass finden und sie entfernen. Wie ist es möglich, etwas wie HashSet wie hier hier zu verwenden?

Ich denke, wir müssen equals in MyDataClass überschreiben?

  1. Aber was, wenn ich nicht den Luxus habe, das zu tun?
  2. Und wie findet HashSet intern tatsächlich Duplikate und fügt sie nicht hinzu? Ich habe gesehen, dass es implementiert wurde hier in OpenJDK aber konnte nicht verstehen.
zengr 18.07.2011, 18:00
quelle

4 Antworten

14

Ich würde vorschlagen, dass Sie sowohl equals als auch hashCode überschreiben ( HashSet stützt sich auf beide!)

Um die Duplikate zu entfernen, könnten Sie einfach ein neues HashSet mit dem ArrayList als Argument erstellen und dann die ArrayList löschen und die in HashSet gespeicherten Elemente zurückstellen.

%Vor%

Und dann

%Vor%
  

Aber was, wenn ich nicht den Luxus habe, das zu tun?

Dann würde ich vorschlagen, dass Sie eine Art Dekorator-Klasse machen, die diese Methoden bereitstellt.

%Vor%     
aioobe 18.07.2011, 18:04
quelle
1

Und wenn Sie den Hashcode von "MyDataClass" nicht überschreiben können und Methoden gleich sind, könnten Sie eine Wrapper-Klasse schreiben, die das behandelt.

    
Daniel 18.07.2011 18:07
quelle
1

Siehe diesen Artikel , der das erklärt Wichtigkeit von equals() und hashCode bis HashSets

Siehe auch die zuvor beantwortete Frage

    
Sam 18.07.2011 18:08
quelle
0
%Vor%     
Harsha 29.08.2013 07:25
quelle

Tags und Links