G
Gast2
Gast
Hallo,
folgende Konstruktion. Ich will etwas aus einer Liste filtern und dass es keien ConcurrentModificationException bekomme fallen mir folgende 3 möglichkeiten ein.
Welche ist die beste und warum?
1. Variante
Ja ich hab das mal in nem java magazin gelesen, dass diese variante nicht so gut ist weiß aber nimmer warum?!?!?!
2.Variante
Weiß nicht ob das Perfomance technisch optimal ist
3.Variante
folgende Konstruktion. Ich will etwas aus einer Liste filtern und dass es keien ConcurrentModificationException bekomme fallen mir folgende 3 möglichkeiten ein.
Welche ist die beste und warum?
1. Variante
Java:
public List<String> filter(List<String> values) {
List<String> result = new ArrayList<String>(values);
for(Iterator<String> it = result.iterator(); it.hasNext(); ) {
String s= it.next();
if(checkString(s)) {
it.remove();
}
}
return result;
}
Ja ich hab das mal in nem java magazin gelesen, dass diese variante nicht so gut ist weiß aber nimmer warum?!?!?!
2.Variante
Java:
public List<String> filter(List<String> values) {
List<String> result = new CopyOnWriteArrayList<String>();
result.addAll(values);
for (String s: result) {
if (checkString(s) {
result.remove(s);
}
}
return result;
}
3.Variante
Java:
public List<String> filter(List<String> values) {
List<String> result = new ArrayList<String>(values);
List tmpList = new ArrayList<String>();
for(String s: result){
if( checkString(s)) {
tmpList.add(s);
}
}
result.removeAll(tmpList);