Lista de Java y Eliminar conjunto para recorrer la colección de

public class SetTest {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("张三");
        set.add("里斯");
        set.add("王五");
        set.add(null);
        //错误的方法
        for (String s : set) {
            if ("张三".equals(s)){
                set.remove(s);
            }
        }
    }
}

Por encima se informará cuando se atraviesa una deleción java.util.ConcurrentModificationExceptionanomalía

El enfoque correcto

Método 1:
public class SetTest {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("张三");
        set.add("里斯");
        set.add("王五");
        set.add(null);
        //正确的做法
        while (iterator.hasNext()){
            String next = iterator.next();
            if ("张三".equals(next)){
                iterator.remove();
            }
        }
        set.forEach(System.out::println);
    }
}
Método 2:
set.removeIf("张三"::equals);

De hecho, los niveles 2 y 1 es el mismo, vistazo al código fuente subyacente a saber

default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }
Publicados 141 artículos originales · ganado elogios 131 · vistas 210 000 +

Supongo que te gusta

Origin blog.csdn.net/qq_41621362/article/details/104111862
Recomendado
Clasificación