| 

.NET C# Java Javascript Exception

3
Ich verwalte Objekte in einer ArrayList und möchte jetzt prüfen, ob einzelne Objekte wertebezogen doppelt vorliegen und diese dann automatisiert entfernen. Wie mache ich das am Besten? Ist es sinnvoll die ArrayList zuvor in ein echtes Datenfeld via toArray zu überführen, damit der wertespezifische und nicht objektspezifische Vergleich möglich ist? Wer hat ein Quelltextbeispiel, das die Entfernung der Duplikate zeigt?
News:
22.06.2012
1 Antwort
1
Hallo Haytham Al-Absi,

wenn Du vermeiden willst, dass in einem Container Duplikate vorliegen, würde ich Dir raten anstelle einer ArrayList einen Set-Container zu verwenden - also einen assoziativen Container. Konkret böte sich da ein java.util.LinkedHashSet an.

Bei einem Set kann jedes Element nur einmal vorkommen.

public class LinkedListTest {
public static void main(String argv[]) {
ArrayList<Integer> arrayList = new ArrayList<Integer>();

arrayList.add(new Integer(1));
arrayList.add(new Integer(2));
arrayList.add(new Integer(3));
arrayList.add(new Integer(3));
arrayList.add(new Integer(3));
arrayList.add(new Integer(4));
arrayList.add(new Integer(5));
arrayList.add(new Integer(6));
arrayList.add(new Integer(7));
arrayList.add(new Integer(7));
arrayList.add(new Integer(8));
arrayList.add(new Integer(8));
arrayList.add(new Integer(9));
arrayList.add(new Integer(10));

System.out.println("arrayList is : " + arrayList);

LinkedHashSet<Integer> hashSet = new LinkedHashSet<Integer>(arrayList);
System.out.println("hashSet is : " + hashSet);
}
}


... liefert, wenn man das Programm laufen lässt ...

arrayList is : [1, 2, 3, 3, 3, 4, 5, 6, 7, 7, 8, 8, 9, 10]
hashSet is : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Allerdings hat das Set den "Nachteil", dass man nicht davon ausgehen sollte, dass die Elemente nach einem Einfügen/Entfernen in der selben Reihenfolge vorliegen, wie man sie zuvor eingefügt hat. Sprich es kann passieren, dass die Elemente umsortiert werden, also die Reihenfolge in der Du die Elemente eingefügt hast muss da nicht zwangsläufig erhalten bleiben.

Das geschieht, weil ein Set intern oft als "Balanced Tree" aufgebaut wird und um diese Baumstruktur abzubilden muss das Set entsprechend aufgebaut sein....

Hilft Dir das weiter?

Schöne Grüße

- Peter -
22.06.2012
hdusel 195 4
LinkedHashSet behält definitionsgemäß die Einfügereihenfolge der Elemente bei. Ist also für den Fragesteller die richtige Option, wenn die Reihenfolge wichtig ist.
dadadom 13.07.2012

Stelle deine Java-Frage jetzt!