Imprimir
Categoría: Java
Visto: 4235

En PC Resumen vamos a ver como funcionan con un ejemplo prácticos los ArrayList y los Iterator en el lenguaje de programación Java. En el siguiente programa utiliza un objeto ArrayList para demostrar algunas características de la interfaz Collection. El programa coloca dos tablas Color en objeto ArrayList y utiliza un objeto Iterator para eliminar los elementos de la segunda colección en la primera colección.

import java.util.List;
import java.util.LinkedList;
import java.util.ListIterator;

public class PruebaList {
    private static final String colores[] = {"negro", "amarillo", "verde", "azul", "violeta", "plateado"};
    private static final String colores2[] = {"dorado", "blanco", "café", "azul", "gris", "plateado"};


    public PruebaList() {
        List<String> lista1 = new LinkedList<String>();
        List<String> lista2 = new LinkedList<String>();
        for (String color : colores) {
            lista1.add(color);
        }
        for (String color : colores2) {
            lista2.add(color);
        }
        lista1.addAll(lista2); // concatena las listas
        lista2 = null; // libera recursos
        imprimirLista(lista1);
        convertirCadenasAMajusculas(lista1);
        imprimirLista(lista1);
        System.out.print("\nEliminando elementos 4 a 6...");
        eliminarElementos(lista1, 4, 7);
        imprimirLista(llista1);
        imprimirListaInversa(lista1);
    }

    public void imprimirLista(List<String> lista) {
        System.out.println("\nllista: ");
        for (String color : lista) {
            System.out.printf("%s ", color);
        }
        System.out.println();
    }

    private void convertirCadenasAMajusculas(List<String> lista) {
        ListIterator<String> iterador = lista.listIterator();
        while (iterador.hasNext()) {
            String color = iterador.next();
            iterador.set(color.toUpperCase());
        }
    }

    private void eliminarElementos(List<String> lista, int inicio, int fin) {
        lista.subList(inicio, fin).clear();
    }

    private void imprimirListaInversa(List<String> lista) {
        ListIterator<String> iterador = lista.listIterator(lista.size());
        System.out.println("\nLista inversa:");
        while (iterador.hasPrevious()) {
            System.out.printf("%s ", iterador.previous());
        }
    }

    public static void main(String args[]) {
        new PruebaList();
    }
}

El método eliminarColores declara dos parámetros de tipo Collection, los cuales contienen cadenas que se pasarán como argumentos. El método accede a los elementos del primer objeto mediante un objeto Iterator. Estas dos interfaces son genéricas. La condición del if llama al método next de Iterator para obtener una referencia al siguiente elemento y utiliza el método contains del segundo objeto Collection para determinar si esta colección contiene el elemento devuelto por next. Si es así se llama al método remove de Iterator para eliminar el objeto de la colección.

Si se modifica una colección mediante alguno de sus métodos, tras crear un iterador para esta colección, el iterador se vuelve inválido de forma inmediata; cualquier operación realizada con él después de ese punto tira excepciones ConcurrentModificationException.