java iterator learn use iterators java with examples
En este tutorial, aprenderemos sobre los iteradores en Java. Tendremos una discusión detallada sobre las interfaces Iterator y ListIterator en Java:
Exploramos todo sobre Java Collection Framework y sus diversas interfaces y clases de soporte en uno de nuestros tutoriales anteriores.
Cuando tiene una colección, entonces desea acceder a sus elementos, agregar / eliminar o procesar los elementos. Para realizar todo este procesamiento a través de un programa Java, debería poder recorrer la colección que está utilizando. Aquí es donde el iterador entra en escena.
Lo que vas a aprender:
- ¿Qué es un iterador de Java?
- Conclusión
¿Qué es un iterador de Java?
En Java, un iterador es una construcción que se utiliza para recorrer o recorrer la colección.
Para utilizar un iterador, debe obtener el objeto del iterador utilizando el ' iterador () ” método de la interfaz de recopilación. Java Iterator es una interfaz de marco de colección y es parte del paquete 'java.util'. Usando Java Iterator puede iterar a través de la colección de objetos.
La interfaz Java Iterator reemplaza al enumerador que se usó anteriormente para recorrer algunas colecciones simples como vectores.
Las principales diferencias entre Java Iterator y Enumerator son:
- Mejora considerable en los nombres de los métodos.
- Puede eliminar elementos de método de la colección que se recorre con un iterador.
En este tutorial, discutiremos los detalles de la interfaz Iterator y la interfaz ListIterator que es una interfaz bidireccional.
Tipos de iteradores
- Enumerador
- Iterador
- ListIterator
En la actualidad, rara vez se utiliza un enumerador. Por lo tanto, en nuestra serie de tutoriales, nos centraremos en las interfaces Iterator y ListIterator.
Interfaz de iterador en Java
La interfaz Iterator en Java es parte del marco de Colecciones en el paquete 'java.util' y es un cursor que se puede usar para recorrer la colección de objetos.
La interfaz de Iterator tiene las siguientes características principales:
- La interfaz Iterator está disponible desde el marco de la colección de Java 1.2 en adelante.
- Atraviesa la colección de objetos uno a uno.
- Popularmente conocido como 'Universal Java Cursor' ya que funciona con todas las colecciones.
- Esta interfaz admite operaciones de 'lectura' y 'eliminación', es decir, puede eliminar un elemento durante una iteración utilizando el iterador.
A continuación se ofrece una representación general de la interfaz del iterador:

A continuación, echemos un vistazo a los métodos de iterador enumerados anteriormente.
Métodos de iterador
La interfaz de Iterator admite los siguientes métodos:
# 1) Siguiente ()
Prototipo: E siguiente ()
Parámetros: sin parámetros
Tipo de retorno: E -> elemento
Descripción: Devuelve el siguiente elemento de la colección.
Si la iteración (colección) no tiene más elementos, arroja NoSuchElementException .
# 2) hasNext ()
Prototipo: booleano hasNext ()
Parámetros: NULO
Tipo de retorno: true => hay elementos en la colección.
Falso => no más elementos
Descripción: La función hasNext () comprueba si hay más elementos en la colección a los que se accede mediante un iterador. Si no hay más elementos, entonces no llamas al método next (). En otras palabras, esta función se puede usar para decidir si se debe llamar al método next ().
# 3) eliminar ()
Prototipo: anular eliminar ()
Parámetros: NULO
Tipo de retorno: NULO
Descripción: Elimina el último elemento devuelto por el iterador que itera sobre la colección subyacente. El método remove () se puede llamar solo una vez por llamada next ().
Si el iterador no admite la operación de eliminación, arroja UnSupportedOperationException . Lanza IllegalStateException si aún no se ha llamado al siguiente método.
# 4) forEachRemaining ()
Prototipo: void forEachRemaining (consumidor super ES > acción)
Parámetros: acción => acción a realizar
Tipo de retorno: vacío
Descripción: Realiza la acción especificada en cada uno de los elementos restantes de la colección hasta que todos los elementos se agotan o la acción arroja una excepción. Las excepciones generadas por la acción se propagan al llamador.
Si la acción es nula, entonces aumenta Excepción de puntero nulo . Esta función es una nueva adición a la interfaz Iterator en Java 8.
Ejemplo de iterador de Java
Implementemos un programa Java para demostrar el uso de la interfaz Iterator. El siguiente programa crea una ArrayList de flores. Luego obtiene un iterador usando el método iterator () de ArrayList. Después de eso, se recorre la lista para mostrar cada elemento.
|_+_|Producción:

Limitaciones de la interfaz del iterador
- La operación para reemplazar un elemento o agregar un nuevo elemento no se puede realizar con este Iterador.
- La iteración procede solo en una dirección, es decir, la dirección de avance.
- Admite solo iteración secuencial.
- Cuando se van a iterar grandes volúmenes de datos, el rendimiento del Iterador se ve afectado.
Iterador VsIterable
Aunque las interfaces Iterable e Iterator suenan similares, son completamente diferentes. Una clase que implementa la interfaz Iterable adquiere la capacidad de iterar sobre los objetos de la clase que utilizan la interfaz del iterador.
A continuación se presentan algunas de las principales diferencias entre estas dos interfaces que debe conocer:
| Interfaz iterable | Interfaz de iterador |
|---|---|
| Representa una colección que se puede atravesar mediante foreach loop. | Permite iterar sobre alguna otra colección. |
| La clase que implementa la interfaz iterable tiene que anular el método iterator (). | Los métodos hasNext () y next () de la interfaz Iterator deben ser anulados por la clase que lo implementa. |
| No almacena el estado actual. | Almacena el estado actual de iteración. |
| Se debe generar una instancia de la interfaz de iterador cada vez que se llama al método iterator (). | No existe tal contrato para la interfaz del iterador. |
| Se mueve solo en la dirección de avance. | Se mueve en la dirección de avance y las subinterfaces como listIterator admiten el desplazamiento bidireccional. |
| No proporciona ningún método para modificar los elementos durante la iteración. | Proporciona el método de eliminación que puede eliminar el elemento cuando la iteración está en curso. |
Interfaz ListIterator en Java
La interfaz ListIterator es una subinterfaz de la interfaz del iterador. Funciona en colecciones de tipo lista como Linkedlists, listas de arreglos, etc. Por lo tanto, esta interfaz supera las deficiencias de la interfaz Iterator.
Las principales características de la interfaz ListIterator incluyen:
- La interfaz ListIterator extiende la interfaz Iterator.
- La interfaz ListIterator admite operaciones CRUD, es decir, crear, leer, actualizar y eliminar.
- Admite la iteración en dirección hacia adelante y hacia atrás.
- Como esta interfaz es bidireccional, el cursor siempre se coloca entre el elemento anterior y el siguiente.
- Esta interfaz funciona principalmente para implementaciones de listas como ArrayList, LinkedList, etc.
- Disponible desde Java 1.2
La interfaz ListIterator se representa como se muestra a continuación:

Como ya se mencionó, la interfaz ListIterator extiende la interfaz Iterator. Por lo tanto, además de admitir todos los métodos de la interfaz de iterador, como se muestra arriba, la interfaz de ListIterator también tiene métodos propios que lo ayudan a realizar operaciones CRUD, así como iteración bidireccional.
Analicemos los métodos ListIterator en detalle.
Métodos ListIterator
Tenga en cuenta que los métodos de la interfaz Iterator, next (), hasNext () y remove () funcionan exactamente, de la misma manera, que la interfaz ListIterator. Por lo tanto, omitiremos estos métodos en esta sección. Además de los métodos mencionados anteriormente, ListIterator tiene los siguientes métodos:
Anterior()
Prototipo: E anterior ()
Parámetros: NULO
Tipo de retorno:
E- elemento anterior de la lista.
– 1: si el iterador está al principio de la lista.
Descripción: Esta función devuelve el elemento anterior de la lista. Una vez que se devuelve el elemento anterior, el cursor se mueve hacia atrás al siguiente elemento.
hasPrevious ()
Prototipo: boolean hasPrevious ()
Parámetros: NULO
Tipo de retorno: true => iterator tiene más elementos cuando la lista se recorre hacia atrás.
Descripción: Esta función comprueba si ListIterator tiene más elementos en la dirección hacia atrás.
previousIndex
Prototipo: int previousIndex ()
Parámetros: NULO
Tipo de retorno:
int - índice del elemento anterior
– 1: si el puntero está al principio de la lista.
Descripción: Devuelve el índice del elemento anterior devuelto por la llamada anterior ().
nextIndex
Prototipo: int nextIndex ()
Parámetros: NULO
Tipo de retorno:
int - siguiente índice
– 1: si el iterador está al final de la lista.
Descripción: Devuelve el siguiente índice del elemento de la lista. Este elemento es devuelto por una llamada al método next ().
colocar()
Prototipo: conjunto vacío (E y)
Parámetros: e - elemento a reemplazar
Tipo de retorno: NULO
Descripción: Se usa para reemplazar el último elemento con el elemento dado e.
agregar()
Prototipo: anular añadir (E e)
Parámetros: e - elemento a agregar
Tipo de retorno: NULO
Descripción: Agrega nuevos elementos a la lista en una posición anterior a la del elemento next ().
Ejemplo de iterador de lista
Ahora, sabemos qué es un ListIterator y cuáles son los diversos métodos que admite. Avancemos e implementemos un programa Java para demostrar ListIterator.
En este programa, hemos utilizado ArrayList. Luego usamos los métodos ListIterator para recorrer la lista en la dirección hacia adelante y hacia atrás y mostrar la salida.
|_+_|Producción:

Hasta ahora hemos discutido las interfaces, el iterador y el Listiterator, a continuación veremos los diversos ejemplos de uso de estas interfaces para atravesar diferentes colecciones. Pero primero, veamos cómo atravesar arreglos simples y luego pasemos a otras colecciones.
Iterador de matriz
En Java, hay dos formas de iterar sobre elementos de matriz. Describamos las formas usando ejemplos de código.
# 1) para bucle
Esta es la forma más sencilla de iterar sobre una matriz. Usamos un bucle for simple que incrementará el índice con cada iteración y mostrará su contenido.
|_+_|Producción:

El programa anterior muestra el contenido de la matriz usando for loop.
# 2) para cada bucle
Esta es la segunda forma de iterar sobre matrices. Aquí usamos un bucle for especializado o un bucle 'forEach'. Aquí recorremos la matriz para cada elemento y luego mostramos el contenido.
|_+_|Producción:

El forEach está más optimizado en comparación con el bucle for. Es más corto de escribir y también más rápido.
Iterador ArrayList
En caso de que desee recorrer una colección ArrayList, puede hacerlo utilizando la interfaz Iterator. Dado que el iterador es una interfaz, no puede instanciarlo directamente. En su lugar, puede usar el método iterator () de la colección ArrayList para obtener el iterador y luego recorrer la lista.
Iterador iterador ();
Ejemplo para demostrar el iterador ArrayList.
|_+_|Producción:

Iterador LinkedList
Ahora veamos la funcionalidad de un iterador en el caso de una colección LinkedList.
La colección LinkedList admite el método listIterator () que devuelve el listIterator para recorrer la lista vinculada.
El formato general de esta función es
ListIterator list_iter = LinkedList.listIterator (índice int);
Aquí, el índice es un valor entero que especifica la posición en la colección de lista enlazada desde donde debe comenzar el recorrido.
Entendamos el iterador de lista en la lista vinculada con un programa de muestra. Hemos modificado el mismo programa iterador de matriz y lo hemos cambiado para que contenga un listiterator con LinkedList.
|_+_|Producción:
cómo crear una aplicación java en eclipse

Iterador Java Map / Hashmap
Map o sus variaciones como hashmap, treemap, etc. no son colecciones. Por lo tanto, no puede usar directamente el método iterador en él. En su lugar, debe iterar sobre los valores de entrada de clave para leer los pares clave / valor.
Aunque puede usar varios métodos como forEach, for loop, etc. para iterar sobre los valores del mapa, usar un iterador para iterar a través de los valores clave es el método mejor y más eficiente. Además, también puede eliminar entradas del mapa durante la iteración utilizando el método de eliminación.
Ejemplo de uso del iterador con HashMap.
|_+_|Producción:

En el programa anterior, hemos definido un mapa con claves enteras y valores de tipo de cadena. Luego definimos un iterador sobre el mapa. Ingrese y visualice los pares clave / valor.
Iterador de conjuntos de Java
El método iterator () de Java.util.set se utiliza para obtener el iterador que devuelve los elementos del conjunto en orden aleatorio.
|_+_|El 'set_iterator' itera sobre los diferentes elementos del conjunto y devuelve sus valores.
De manera similar, el conjunto hash también contiene una función de iterador que devuelve un iterador como un iterador de conjunto.
|_+_|A continuación se muestra el ejemplo de programación para demostrar el iterador de conjuntos.
|_+_|Producción:

Esta implementación utiliza el Iterador HashSet y muestra valores individuales iterando sobre los elementos HashSet.
Iterador vs ListIterator
Tabularicemos las principales diferencias entre las interfaces Iterator y ListIterator.
| Iterador | ListIterator |
|---|---|
| Puede atravesar todas las colecciones, incluidos conjuntos, mapas, etc. | Se puede usar para recorrer solo la colección de tipos de lista como ArrayList, LinkedList. |
| Itera la colección solo en la dirección de avance. | Puede iterar sobre la colección tanto hacia adelante como hacia atrás. |
| No se pueden obtener índices. | Puede obtener índices. |
| No hay forma de agregar nuevos elementos a la colección. | Puede agregar nuevos elementos a la colección. |
| El iterador no puede modificar los elementos durante la iteración. | ListIterator puede modificar los elementos de la colección usando el método set (). |
Preguntas frecuentes
P # 1) ¿Qué es la iteración en Java?
Responder: Una iteración es un proceso mediante el cual un bloque de código se ejecuta repetidamente hasta que una condición determinada se cumple o no existe. Mediante la iteración, puede recorrer una secuencia de elementos o procesar los datos.
P # 2) ¿Cuántos tipos de iteradores hay en Java?
Responder: Los iteradores se utilizan para recorrer las colecciones en Java.
Hay tres tipos de iteradores en Java:
- Enumeradores
- Iteradores
- ListIterators
P # 3) ¿Cómo uso un iterador en Java?
Responder: Para usar el iterador para recorrer la colección, primero debe obtener el iterador usando el método iterator () de la colección especificada.
Luego puede usar los métodos hasNext () y next () del iterador para obtener el elemento.
P # 4) ¿Por qué se usa Iterator en lugar de for loop?
Responder: Tanto el iterador como el bucle for se utilizan para ejecutar repetidamente un bloque de código específico. Pero la principal diferencia es que en el bucle for no se puede alterar ni modificar el contenido de la colección. Incluso si intenta modificarlo, arrojará concurrentModificationException. Usando el iterador puede eliminar un elemento de la colección.
P # 5) ¿Por qué necesitamos Iterator en Java?
Responder: Iterator te ayuda a recuperar los elementos de la colección o un contenedor sin que el programador tenga que conocer la estructura interna o el funcionamiento de la colección. Son más elegantes, consumen menos memoria y el programador se ahorra en escribir código extenso.
En segundo lugar, los elementos se pueden almacenar en la colección de cualquier manera, pero utilizando un iterador, el programador puede recuperarlos como una lista o cualquier otra secuencia.
Conclusión
Hemos discutido los iteradores en Java que se usan con colecciones en este tutorial. Este conocimiento de los iteradores ayudará a los lectores a comprender las colecciones que aprenderemos en nuestros tutoriales posteriores.
Lectura recomendada
- Tutorial de interfaz Java y clase abstracta con ejemplos
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- Implementación de Java: creación y ejecución de un archivo JAR de Java
- Java 'this' palabra clave: tutorial con ejemplos de código
- Máquina virtual Java: cómo JVM ayuda a ejecutar aplicaciones Java
- Modificadores de acceso en Java: tutorial con ejemplos
- Tutorial de reflexión de Java con ejemplos
- C ++ Vs Java: Las 30 principales diferencias entre C ++ y Java con ejemplos