2016-04-24 12 views
0

Ich habe 2 Quellen, aus denen ich Daten lese. Diese Daten könnten dupliziert werden, und ich muss diese Duplikate erkennen, indem ich die 2 Sammlung von einander subtrahiere. Derzeit verwende ich List<Map<String, String> duplList, so, wenn ich doppelte Werte einfügen:Effiziente Datenstruktur zum Speichern/Hinzufügen/Entfernen von doppelten Elementen

Map<String, String> map1 = new HashMap(); 
map1.put("1", "1"); 
map1.put("1", "1"); 
map1.put("1", "1"); 
duplList.add(map1); 

Map<String, String> map2 = new HashMap(); 
map2.put("1", "1"); 
map2.put("1", "1"); 
duplList.add(map2); 

Und später sie subtrahieren:

Collection diff1 = CollectionUtils.subtract(map1, map2); 
Collection diff2 = CollectionUtils.subtract(map2, map1); 

ich ein Objekt, das den Unterschied zwischen map1 und map2 enthält.
Während dies funktioniert, scheint es nicht sehr effizient zu sein (wie es in O (n) Zeit läuft).

Ich frage mich, ob es eine effizientere Möglichkeit gibt, Daten zu einer effizienteren Datenstruktur hinzuzufügen und zu subtrahieren.

+0

Wie definieren Sie Duplikate? Doppelte Schlüssel oder Schlüssel/Wert-Paare? Wie lösen Sie Konflikte, nachdem die Duplikate gefunden wurden? –

+0

Wenn ich Sie richtig verstanden habe, können Sie Ihre "duplizierbaren" Objekte mithilfe der Methode add zu Set hinzufügen. Wenn der Aufruf von add mit einem Objekt false zurückgibt, ist das Objekt doppelt vorhanden. Speichern Sie es daher in einer separaten Sammlung. – Ilya

+0

@SergeiLebedev Duplikate sind als der gleiche Schlüsselwert definiert, also "1" -> "1" ist ein Duplikat, aber "1" -> "2" ist nicht. – ocp1000

Antwort

0

Wenn Sie nur Ihre Daten in einer unsortierten Sammlung möchten, können Sie HashSet verwenden, wenn Sie es sortiert haben möchten, können Sie TreeSet verwenden. TreeSet erfordert eine Klasse, die Comparable implementiert - wenn Sie nur mit Strings oder Ganzzahlen arbeiten, sollten Sie in Ordnung sein. Weitere Informationen finden Sie unter Java Doc: Set

+0

Ich habe nicht erwähnt, dass meine Daten im Schlüssel-Wert-Paar Format sein müssen. Ist es effizienter, es in Set > als Liste > zu speichern? – ocp1000