Java Sammlung von einzigartigen Elementen

8

Ich habe eine Sammlung coll von myObject. Ich möchte nur dann ein Element zu coll hinzufügen, wenn es kein solches Element in der Sammlung gibt.

Ich habe die equals-Methode von myObject überschrieben. Es prüft auf die Gleichheit seiner 20 Attribute.

Aber im Falle der Sammlung würde ich gerne die Gleichheitsprüfung (und damit das Hinzufügen) basierend nur auf einem dieser Attribute vornehmen.

Vielleicht ist meine Architektur fehlerhaft, und ich sollte nicht zwei Gleichheitsdefinitionen haben und stattdessen zwei verschiedene Objekte haben.

Aber ist es möglich, ohne zu viel Refactoring von hier aus das zu erreichen, was ich will? Das heißt, ich hätte gerne eine Art Set-Sammlung, in der ich sagen könnte, wie man die Vergleichsprüfung durchführt. Dies wäre vergleichbar mit der Collection.sort () -Methode, bei der Sie den Komparator für den Vergleich bereitstellen können.

    
jbenz 15.04.2013, 06:35
quelle

4 Antworten

9

gehen Sie zu HashSet .Es werden eindeutige Werte gespeichert Von Kommentaren hier müssen Sie den Hashcode überschreiben und entspricht Methoden, um die Eindeutigkeit jedes Objekts bereitzustellen. Sie können die Beziehung zwischen diesen beiden Methoden lesen hier .

    
Android Killer 15.04.2013 06:38
quelle
2

Sie suchen nach einem Set und einem von seine Implementierungen.

    
user1907906 15.04.2013 06:39
quelle
2

Sie können die vorhandenen Container nicht verwenden, um die Eindeutigkeit zu erzwingen, da sie alle equals verwenden möchten.

Wenn es sich nur um ein Attribut handelt, können Sie eine Karte mit diesem Attribut als Schlüssel verwenden. Das erlaubt nur einen Eintrag pro Wert für dieses Attribut.

equals und hashCode sind für die Verwendung mit Sammlungen vorgesehen. Sie sollten Ihr Design ändern. Vielleicht nennen Sie Ihren eigenen Ebenbürtigen (den Sie jetzt haben) etwas anderes. Vielleicht steckst du diese Dinge nicht direkt in Sammlungen, sondern wickelst sie in einen Adapter ein.

    
Thilo 15.04.2013 06:40
quelle
0

Mit einem TreeSet (Comparator comparator) müssen Sie sich nicht auf die 'equals / hashCode' Implementierung verlassen.

Wenn Ihre Sammlung eine Liste ist, können Sie sie auch mit einem Vergleicher Collections.sort (Liste Liste, Comparator c);

sortieren     
Legna 01.08.2017 17:10
quelle

Tags und Links