Anuncios

Bienvenidos sean a este post, en el post de colecciones framework hemos hablado de que el mejor metodo para utilizar ciclicamente es por medio del iterator, donde hicimos un ejemplo para mostrar cada uno de los componentes almacenados en la misma y como mencionamos en el mismo Iterator te permite conseguir el listado de los componentes y ListIterator nos permite una comunicacion bidireccional tanto para listar como para modificar los elementos de la coleccion.

Anuncios

Para poder acceder a una coleccion por medio de un iterator debes obtener una, cada una de las clases de coleccion provee un metodo iterator() que devuelve un iterator al inicio de la coleccion, y por medio de este objeto podras acceder a cada elemento de la coleccion, un elemento por vez.

Anuncios

Para utilizar un iterator en bucle a traves de los contenidos de una coleccion se deben seguir los siguientes pasos:

  1. Obten un iterator al inicio de la coleccion por medio del llamado al metodo iterator de collection
  2. Establece un bucle que utilice hasNext() y se debe prolongar tan largo como sea verdadero
  3. Dentro del loop obten a cada elemento por medio de next()
Anuncios

Para las colecciones que implementan List se puede obtener un iterator por medio de ListIterator, veamos ahora algunos metodos declarados por Iterator:

  • boolean hasNext(), devuelve verdadero si hay mas elementos de lo contrario devuelve falso
  • Object next(), devuelve al proximo elemento y lanza un NoSuchElementException si no hay un proximo elemento
  • void remove(), elimina el elemento actual. Lanza la excepción IllegalStateException si se intenta llamar a remove() que no está precedido por una llamada a next ()
Anuncios

Nuestro siguiente paso sera ver a los metodos declarados por ListIterator:

Anuncios
  • void add(Object o), ingresa al objeto o dentro de la lista por delante del elemento que sera retornada por la proxima llamada de next()
  • boolean hasNext(), devuelve verdadero si hay un proximo elemento de lo contrario devuelve falso
  • boolean hasPrevious(), devuelve verdadero si hay un elemento anterior de lo contrario devuelve falso
  • Objeto next(), devuelve al proximo elemento y lanza un NoSuchElementException si no hay un proximo elemento
  • int nextIndex(), devuelve el indice del proximo elemento y en caso de no existir un proximo elemento devuelve el tamaño de la lista
  • Objeto previous(), devuelve el elemento previo y lanza un NoSuchElementException si no hay un elemento previo
  • int previousIndex(), devuelve el indice del elemento previo y en caso de no existir devuelve un -1
  • void remove(), elimina el elemento actual de la lista. Se lanza una excepción IllegalStateException si se llama a remove() antes de invocar next() o previous()
  • void set(Object o), asignar al objeto o al actual elemento, este es el ultimo elemento devuelto tanto por next() como previous()
Anuncios

Para entender un poco mejor el concepto de iterator apliquemos el siguiente ejemplo:

IteratorDemo.java:

import java.util.*;

public class IteratorDemo
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();

                al.add("C");
                al.add("A");
                al.add("E");
                al.add("B");
                al.add("D");
                al.add("F");

                System.out.print("Contenido original de al: ");
                Iterator itr = al.iterator();

                while(itr.hasNext())
                {
                        Object elemento = itr.next();
                        System.out.print(elemento + " ");
                }
                System.out.println();

                ListIterator litr = al.listIterator();

                while(litr.hasNext())
                {
                        Object elemento = litr.next();
                        litr.set(elemento + "+");
                }
                System.out.print("Contenido modificado de al: ");
                itr = al.iterator();

                while(itr.hasNext())
                {
                        Object elemento = itr.next();
                        System.out.print(elemento + " ");
                }
                System.out.println();

                System.out.print("Listado modificado en reversa: ");

                while(litr.hasPrevious())
                {
                        Object elemento = litr.previous();
                        System.out.print(elemento + " ");
                }

                System.out.println();
        }
}
Anuncios

En este ejemplo aplicaremos tanto a Iterator como ListIterator, para ello primero debemos crear un ArrayList llamado al, luego agregaremos seis letras, nuestro siguiente paso sera crear el iterator con respecto al ArrayList al donde por medio del while obtendremos cada uno de los elementos por medio de next() y lo iremos imprimiendo paulatinamente, para nuestro siguiente paso crearemos el objeto de ListIterator llamado litr y como pueden ver lo aplicamos a al pero en este caso utilizaremos el while para modificar cada elemento de al para ello usaremos tambien a next() para cambiar de elemento y luego por medio de set() le agregaremos el simbolo de mas (+) a cada elemento, volvemos a asignarle a itr el iterator con al y con el while volveremos a mostrar todos los elementos pero en este caso deberian estar modificados por ultimo utilizaremos de nuevo a itr pero esta vez en el bucle en lugar de usar hasNext() usaremos hasPrevious(), esto nos permitira crear un listado pero en sentido inverso, para ello en el bucle en lugar de usar next() usamos previous() para luego mostrarlo en pantalla, con todo esto realizado podemos compilarlo y probarlo para obtener una salida como se ve a continuacion:

tinchicus@dbn001vrt:~/programacion/java/codigo$ java IteratorDemo
Contenido original de al: C A E B D F
Contenido modificado de al: C+ A+ E+ B+ D+ F+
Listado modificado en reversa: F+ D+ B+ E+ A+ C+
tinchicus@dbn001vrt:~/programacion/java/codigo$

Pueden ver como la primera linea muestra los elementos que ingresamos, la segunda linea muestra como modificamos por medio de ListIterator los elementos del ArrayList y por ultimo podemos ver el listado en reversa pero a su vez sigue modificado.

Anuncios

En resumen, hemos visto de que se trata Iterator, para que se usa, como se aplica, su relacion ListIterator, las diferencias entre ambas clases, los metodos para Iterator, los metodos de ListIterator y un ejemplo donde pudimos poner en practica todo, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00