Imprimir
Categoría: Java
Visto: 7645

En PC Resumen vamos a ver como funcionan las LinkedList en el lenguaje de programación Java. En el programa siguiente se muestran operaciones con objetos LinkedList. El programa crea dos objetos que contienen String. Los elementos de una lista se agregan a otra. Después todos los objetos String se convierten a mayúsculas y elimina un rango de elementos.

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);
        convertirCadenesAMajuscules(lista1);
        imprimirLista(lista1);
        System.out.print("\nEliminando elementos 4 a 6 ...");
        eliminarElementos(lista1, 4, 7);
        imprimirLista(lista1);
        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 convertirCadenasAMajusculas llama al método listIterator de la clase List para obtener un iterador bidireccional. Fijémonos que ListIterator es una clase genérica. Seguidamente se hace una llamada al método set de ListIterator para reemplazar el objeto actual con el objeto String devuelto por el método toUpperCase.

El método eliminarElementos elimina un rango de elementos de la lista. En este método se hace una llamada al método sublista de List para obtener una sublista. Este método recibe dos argumentos: el índice inicial para la sublista y el índice final (éste no forma parte del rango de la sublista). A continuación, el programa hace una llamada al método clear en la sublista para eliminar los elementos que ésta contiene. Cualquier cambio realizado en la sublista se hace realmente al objeto List original.

El método imprimirListaInversa nos muestra cómo recorrer una lista en orden inverso.

Una característica importante del marco de trabajo de las colecciones es la habilidad de manipular los elementos de un tipo de colección (como un conjunto) a través de un tipo de colección diferente (como una lista), sin importar la implementación interna de la colección. Al conjunto de métodos públicos a través de los que se manipulan las colecciones se les conoce como vista.

La clase Arrays proporciona el método estático asList para ver una tabla como una colección List. Esta vista es útil para agregar los elementos en una tabla en una colección y para ordenarlos. En el siguiente programa veremos cómo crear un objeto LinkedList con una vista List de una mesa, ya que no podemos pasar la tabla a un constructor LinkedList. En el programa podemos ver cómo ordenar los elementos de la tabla con una vista List. Cualquier modificación realizada a través de la vista cambia la mesa y cualquier modificación de la tabla cambia la vista. La única operación permitida a la vista vuelta es siete la que cambia el valor de la vista y de la mesa. Cualquier otro operación de modificación (como añadir o eliminar elementos) produce una excepción UnsupportedOperationException.

En el programa las operaciones add están permitidas porque están operando al objeto LinkedList y no a la vista.

Finalmente llamamos al método toArray para obtener una tabla de String con los objetos de la lista. La tabla es una copia de los elementos de la lista. La tabla que se pasa al método debe ser del mismo tipo que se desea que devuelva el método. Si el número de elementos en la tabla es mayor o igual que el número de elementos en la lista, el método copia los elementos de la lista y devuelve esta tabla. Si la lista contiene más elementos que el número de elementos de la tabla, el método asigna una nueva tabla del mismo tipo que recibe como argumento, copia los elementos de la tabla y la devuelve.

Pasar una tabla que contenga datos al método toArray puede crear errores lógicos. Si el número de elementos en la tabla es menor que el número de elementos en la lista, se asigna una nueva tabla para guardarlos sin preservar los elementos de la tabla. Si el número de elementos de la tabla es mayor que el número de elementos de la lista, los elementos de la tabla (comenzando en el índice 0) se sobrescriben con los elementos de la lista. Los elementos que no se sobreescriben retienen sus valores.

public class UsToArray {
    
    public UsToArray() {
        String colores[] = {"negro", "azul", "amarillo"};
        LinkedList<String> enlaces = new LinkedList<String>(Arrays.asList(colores));
        enlaces.addLast("rojo");
        enlaces.add("rosa");
        enlaces.add(3, "verde");
        enlaces.addFirst("cyan");
        colores = enlaces.toArray(new String[enlaces.size()]);
        System.out.println("colores:");
        for (String color: colores) {
            System.out.println(color);
        }
    }

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