lunes, 15 de junio de 2020

Colecciones List

List es parte del Java Collection Framework. Esta es una interfaz que tiene como superinterfaz a Collection y este a su vez a Iterable. De manera que una implementación de List puede emplear los métodos declarados en Collection e Iterable.

Esta es una colección ordenada de objetos (secuencia) en la que cada elemento tiene una posición.Por lo tanto, el usuario tiene control sobre cada uno de sus elementos a través de un índice entero (index). Además, esta interfaz define métodos para consultar o establecer el elemento en una posición particular.

Una colección de este tipo se asemeja a un array cuyo tamaño cambia según sea necesario para acomodar la cantidad de elementos que contiene. A diferencia de las Interfaces Set, esta permite que se tengan elementos duplicados.

Se pueden implementar objetos que empleen los métodos de esta interfaz a través de las clases:
  • ArrayList
  • LinkedList
  • CopyOnWriteArrayList
  • Vector
  • Stack

Clase ArrayList

ArrayList es una estructura de datos similar a los arrays, pero mientras en los arrays se debe definir la longitud o tamaño de este, en los ArrayList no es necesario, esto genera una simplicidad al programador para agregar, recorrer, modificar o eliminar sus elementos.

Se puede crear una colección de tipo ArrayList mediante la interfaz List o directamente como una clase.

package test;

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {

        /* Creando la estructura de datos*/
        ArrayList<string> lista = new ArrayList<>();

        /*Agregando elementos*/
        lista.add("Juan");
        lista.add("Luis");
        lista.add("Carlos");
        lista.add("Ana");
        lista.add("Alberto");

        /*Listando los elementos*/
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });

        /* Tamaño de la estructura "size()" */
        System.out.println("Tamaño: " + lista.size());
        System.out.println("----------------");

        /* Modificando un valor */
        System.out.println("Valor inicial: " + lista.get(2));
        lista.set(2, "Reemplazado"); //Indicamos el index
        System.out.println("Valor modificado: " + lista.get(2));
        System.out.println("----------------");

        /* Eliminando un registro por contenido o index*/
        lista.remove("Ana"); // lista.remove(3);
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });
        System.out.println("----------------");

        /* Agregar al inicio o al final */
        lista.add(0,"Ada");
        lista.add(lista.size(),"Veronica");
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });
        System.out.println("----------------");       
    }

}


Resultado:
Nombre: Juan
Nombre: Luis
Nombre: Carlos
Nombre: Ana
Nombre: Alberto
Tamaño: 5
----------------
Valor inicial: Carlos
Valor modificado: Reemplazado
----------------
Nombre: Juan
Nombre: Luis
Nombre: Reemplazado
Nombre: Alberto
----------------
Nombre: Ada
Nombre: Juan
Nombre: Luis
Nombre: Reemplazado
Nombre: Alberto
Nombre: Veronica
----------------


Clase LinkedList

LinkedList es una estructura de datos lineal que se asemeja a los arrays. la gran diferencia es que los elementos dentro de esta clase no están almacenados de forma contigua como en los arrays. sino que se vinculan entre sí mediante punteros. Cada elemento de LinkedList tiene la referencia (dirección / puntero) al siguiente elemento de LinkedList.

Se puede crear una colección de tipo LinkedList mediante las interfaces List o Deque, o directamente como una clase.
package test;

import java.util.LinkedList;

public class Test {

    public static void main(String[] args) {

        /* Creando la estructura de datos*/
        LinkedList<string> lista = new LinkedList<>();

        /*Agregando elementos*/
        lista.add("Juan");
        lista.add("Luis");
        lista.add("Carlos");
        lista.add("Ana");
        lista.add("Alberto");

        /*Listando los elementos*/
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });

        /* Tamaño de la estructura "size()" */
        System.out.println("Tamaño: " + lista.size());
        System.out.println("----------------");

        /* Modificando un valor */
        System.out.println("Valor inicial: " + lista.get(2));
        lista.set(2, "Reemplazado"); //Indicamos el index
        System.out.println("Valor modificado: " + lista.get(2));
        System.out.println("----------------");

        /* Eliminando un registro por contenido o index*/
        lista.remove("Ana"); // lista.remove(3);
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });
        System.out.println("----------------");

        /* Agregar al inicio o al final */
        lista.addFirst("Ada");
        lista.addLast("Veronica");
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });
        System.out.println("----------------");

        /* Capturar un valor y eliminarlo */
        String primero = lista.pollFirst();
        System.out.println("Nombre eliminado: " + primero);
        lista.forEach((nom) -> {
            System.out.println("Nombre: " + nom);
        });
        System.out.println("----------------");
    }

}


Resultado:
Nombre: Juan
Nombre: Luis
Nombre: Carlos
Nombre: Ana
Nombre: Alberto
Tamaño: 5
----------------
Valor inicial: Carlos
Valor modificado: Reemplazado
----------------
Nombre: Juan
Nombre: Luis
Nombre: Reemplazado
Nombre: Alberto
----------------
Nombre: Ada
Nombre: Juan
Nombre: Luis
Nombre: Reemplazado
Nombre: Alberto
Nombre: Veronica
----------------
Nombre eliminado: Ada
Nombre: Juan
Nombre: Luis
Nombre: Reemplazado
Nombre: Alberto
Nombre: Veronica
----------------



Comparación entre ArrayList y LinkedList


ArrayList LinkedList
Internamente emplea una matriz dinámica para almacenar los elementos. Internamente utiliza una lista doblemente vinculada para almacenar los elementos.
La manipulación es lenta, porque internamente usa una matriz. Si se elimina algún elemento de la matriz, todos los bits se desplazan en la memoria. La manipulación es rápida, porque utiliza una lista doblemente vinculada, por lo que no se requiere ningún cambio en la memoria.
Puede actuar como una lista solo porque implementa solo a la interfaz List. Puede actuar como una lista y una cola, ya que implementa las interfaces List y Deque.
Es la mejor opción para almacenar y acceder a datos. Es la mejor opción para manipular datos.


No hay comentarios:

Publicar un comentario