Repetidor (repetidor) atraviesa el elemento de la colección Colección

Iterador (iteradores) es una interfaz, su función consiste en recorrer todos los elementos de los miembros de contenedores, así como Java Collections Framework, pero y la colección Mapa colección de la serie no es lo mismo, y la serie de colección de mapa se utiliza principalmente para contener una colección de otros objetos, el iterador se utiliza principalmente para poligonal (es decir, itera) elemento de recogida de colección.

Iterador interfaz oculta los detalles subyacentes de la clase de implementación Collection, colección ofrece una colección de elementos que atraviesan una interfaz de programación unificado para la aplicación. Iterator interfaz definida en los cuatro métodos siguientes.

	boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回 true。
	
	Object next():返回集合里的下一个元素。
	
	void remove():删除集合里上一次 next 方法返回的元素。
	
	void forEachRemaining(Consumer action):这是 Java 8 为 Iterator 新增的默认方法,该方法可使用 Lambda 表达式来遍历集合元素。

Iterador para recorrer a través del conjunto de elementos de la interfaz.

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class IteratorTest {
    public static void main(String[] args) {
        // 创建一个集合
        Collection objs = new HashSet();
        objs.add("Java教程");
        objs.add("C语言教程");
        objs.add("python教程");
        // 调用forEach()方法遍历集合
        // 获取books集合对应的迭代器
        Iterator it = objs.iterator();
        while (it.hasNext()) {
            // it.next()方法返回的数据类型是Object类型,因此需要强制类型转换
            String obj = (String) it.next();
            System.out.println(obj);
            if (obj.equals("百度C语言")) {
                // 从集合中删除上一次next()方法返回的元素
                it.remove();
            }
            // 对book变量赋值,不会改变集合元素本身
            obj = "百度Python语言";
        }
        System.out.println(objs);
    }
}

Se puede ver en el código anterior, sólo a través de la colección de iterador creado si los objetos Iterator necesarios, debe haber una serie de iteraciones. Iterador ningún valor de la colección no existe.

prestar atención: Iterador debe pegarse al objeto Collection, si un objeto iterador, debe haber un objeto de colección asociada a ella. Iterator proporciona dos métodos para iterar Collection la colección de elementos, y pueden ser eliminados por el método de recogida remove () en un next () devuelve el método una colección de elementos.

Al acceder a un elemento de la colección utiliza una colección de iterador, Colección de elementos de la colección no se puede cambiar, la única manera de eliminar un next () devuelve el método de una colección de elementos a través del remove iterador () puede, de lo contrario, dará lugar a "java.util. ConcurrentModificationException "excepción. El programa siguiente muestra esto.

public class IteratorErrorTest {
    public static void main(String[] args) {
        // 创建一个集合
        Collection objs = new HashSet();
        objs.add("百度Java教程");
        objs.add("百度C语言教程");
        objs.add("百度C++教程");
        // 获取books集合对应的迭代器
        Iterator it = objs.iterator();
        while (it.hasNext()) {
            String obj = (String) it.next();
            System.out.println(obj);
            if (obj.equals("百度C++教程")) {
                // 使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常
                objs.remove(obj);
            }
        }
    }
}

La salida es:

百度C++教程
Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextNode(Unknown Source)
        at java.util.HashMap$KeyIterator.next(Unknown Source)
        at IteratorErrorTest.main(IteratorErrorTest.java:15)

La línea 15 está situado dentro de un bloque Iterador de código, que se fija en una colección Colección iterador modificado durante la recolección, por lo que el programa se producirá una excepción en tiempo de ejecución.

Un iterador utiliza el fracaso rápido (fail-fast) mecanismo, después de la detección del conjunto en el proceso iterativo se ha modificado (por lo general otros hilos para modificar el programa), el programa plantea inmediatamente ConcurrentModificationException excepción, en lugar de mostrar el modificado como resultado, para evitar posibles problemas causados ​​por los recursos compartidos.

	快速失败(fail-fast)机制,是 Java Collection 集合中的一种错误检测机制。

prestar atención: Si el procedimiento anterior se cambió para eliminar la cadena "Baidu lenguaje C tutorial", se plantea no es una excepción. Para HashSet y ArrayList espalda, etc., elementos remove pueden conducir a la iteración anormal. Sólo cuando se elimina un elemento específico en la colección no será una excepción, que está determinada por un conjunto de código que implementa la clase.

Publicados 457 artículos originales · ganado elogios 94 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_45743799/article/details/104715828
Recomendado
Clasificación