Red de conocimiento informático - Consumibles informáticos - Tres métodos transversales de uso común para colecciones

Tres métodos transversales de uso común para colecciones

1 iterador Iterador

Resultados de la operación

Explique que en el ejemplo anterior, for y while no pueden usar el mismo objeto iterador, porque el iterador ya ha regresado a al final del ciclo while Para un elemento, el siguiente elemento señalado por el puntero está vacío, es decir, el valor de retorno de hasNext () es falso y el hasNext () del iterador no se puede utilizar como condición de juicio. del bucle for.

2 Convertir a objeto[] para recorrido

Ejecución de resultados

3 Uso mejorado para (foreach) para implementar recorrido

Ejecución de resultados

`Nota·

El for mejorado tiene una desventaja. Si la colección o matriz es nula, se informará una NullPointerException. Es mejor hacer un juicio primero al llamar al for mejorado. A través de la descompilación, podemos ver que el for mejorado se implementa utilizando el bucle for del iterador, que es un reemplazo del iterador que también tiene este tipo de problema de excepción de puntero nulo.

4 Descripción

Como resultado de la operación, el contenido de los elementos de la colección permanece sin cambios

*4.2 Excepción de modificación paralela ConcurrentModificationException

4.2.1 Iterador y En el bucle recorrido por foreach (mejorado para), el objeto de colección en sí no puede llamar a métodos para cambiar el contenido de la colección; de lo contrario, la operación informará un error java.util.ConcurrentModificationException (y modificará la excepción)

El motivo es: iterador y foreach Todos existen según la colección. Si la colección cambia, ni el iterador ni el for mejorado lo saben, por lo que se informará una excepción de modificación paralela.

Resultados de la ejecución

4.2.2 Solución

A Utilice un bucle for normal para modificar el contenido de acuerdo con el juicio establecido en el bucle

B usa un iterador para modificar el contenido de la colección. No existe tal método en la interfaz Iterator. Su subclase ListIterator proporciona add()

Para obtener más información, consulte: /p/94b12cceb6c7. (2, 3.3)

4.3 Si next() se usa varias veces en un bucle iterador de un objeto de colección, se producirá una excepción java.util.NoSuchElementException.

Resultados de la ejecución

4.4 El remove() del iterador puede eliminar el elemento devuelto por next(). Esto también se considera un cambio en el contenido de la colección y el valor de. el elemento no se puede utilizar para la iteración. Explicación, heredado

Resultados en ejecución

.