# List<String> auf doppelte Einträge überprüfen



## Allrounder93 (23. Okt 2013)

Moin,

ich habe eine String-Liste mit rund 80.000 Einträgen und würde diese gerne auf doppelte Einträge überprüfen...
Dabei soll bei jedem Treffer der eintrag gelöscht werden und eine Methode ausgeführt werden, die dann mit dem doppelten Listeneintrag weiterarbeitet...
Ich komme bisher nur Fehlermeldungen, da ich zwei For-Schleifen benutze und sobald ich etwas lösche das ganze nicht mehr funkt...

Kann mir jemand weiterhelfen?


----------



## Rubber (23. Okt 2013)

Ich gehe mal davon aus, du arbeitest mit

```
for(String f: StringList){
...
}
```

In dem fall gilt:
du darfst nicht aus der Liste löschen, solange diese ncoh durchlaufen wird.
Ich hatte es einfach so gemacht, dass ich eine 2. Liste angelegt hatte, wo ich dann alle zu löschenden Objekte abgelegt hatte und danach halt einfach die neue Liste durchgehen und aus der alten Liste jedes Objekt löschen.
Aus der ersten sind die doppelten dann raus und in der 2. noch drin.


----------



## jonas.r (23. Okt 2013)

Während du über eine Liste iterierst, kannst du diese nicht modifizieren, also Elemente aus ihr löschen oder hinzufügen. Du bekommst dann eine CurrentModificationException. Mache es so, dass du die Elemente, die gelöscht werden sollen in eine neue Liste einfügst und dann über diese Liste iterierst und mit remove(object) in der eigentlichen liste rauslöscht.

Beispiel:

```
for(Object o : list){
if (remove){
removeList.add(o);
}
}

for(Object o : removeList){
list.remove(o);
}
```

Liebe Grüße,
Jonas Rudolph

P.s.: Huch, da war jemand schneller =D


----------



## Allrounder93 (23. Okt 2013)

Danke


----------



## eRaaaa (23. Okt 2013)

Nur der Vollständigkeit halber:


			
				jonas.r hat gesagt.:
			
		

> Während du über eine Liste iterierst, kannst du diese nicht modifizieren, also Elemente aus ihr löschen oder hinzufügen. Du bekommst dann eine CurrentModificationException.



Das stimmt nur begrenzt, es kommt drauf an.
http://www.java-forum.org/errors-exceptions/3583-haeufige-errors-exceptions-warnings.html#post701853
Mit dem ListIterator und dessen remove-Methode ginge das schon

Ein weiterer Vorschlag ganz ohne zwei mal iterieren oder etwas löschen zu müssen wäre der Gebrauch eines Set`s


```
List<String> stringlist = new ArrayList<>(Arrays.asList("A","B","C","D","A","B"));
		Set<String> stringset = new HashSet<>();  //oder LinkedHashSet etc.
		for (String string : stringlist) {
			if(!stringset.add(string)){
				System.out.println("Duplikat: "+string); // rufe damit deine Methode auf
			}
		}
```


----------

