Saltar al contenido principal
Página

Tema 2.4 - Listas

En la interfaz List se define como una sucesión de elementos, lo que quiere decir, en este si poseen un orden, ademas a diferencia de la colección Set este si puede tener elementos duplicados. En las listas cada elemento estará en una determinada posición o indice.


A parte de los métodos heredados de Collection, esta añade métodos que nos permite mejorar los siguientes puntos:

  • Acceso posicional a elementos: manipula elementos en función de su posición en la lista.
  • Búsqueda de elementos: busca un elemento concreto de la lista y devuelve su posición.
  • Iteración sobre elementos: mejora el Iterator por defecto.
  • Rango de operación: permite realizar ciertas operaciones sobre rangos de elementos dentro de la propia lista.

Tengamos en cuenta que las listas nos proporcionan otros métodos a los generales de las colecciones, algunos de ellos son:

  • void add(int indice, Object obj): este nos permite insertar un elemento (objeto) en la posición de la lista dada por el índice indicado.
  • get(int indice): se encarga de obtener el elemento de la posición de la lista dada por el índice indicado.
  • int indexOf(Object obj): nos dice cual es el índice de dicho elemento dentro de la lista. Nos devuelve -1 si el objeto no se encuentra en la lista.
  • remove(int indice): nos permite eliminar el elemento que se encuentre en la posición de la lista indicada mediante dicho índice, devolviéndonos el objeto eliminado.
  • set(int indice, Object obj): establece el elemento de la lista en la posición dada por el índice al objeto indicado, sobrescribiendo el objeto que hubiera anteriormente en dicha posición. Nos devolverá el elemento que había previamente en dicha posición.


Tal como observamos en la colección Set, la interfaz List nos permite trabajar con varios tipos de implementaciones realizadas dentro de la plataforma Java. Vamos a analizar cada una de ellas:

ArrayList

Esta es la implementación mas típica. Se basa en un array redimensionable en el cual puede crecer según crece su colección de elementos. Es la que mejor rendimiento tiene sobre la mayoría de situaciones.


Lo primero que debemos resolver es como declaramos una lista, para esto seguimos la estructura:

List ejemploLista = new ArrayList();

Este tipo de lista nos permite almacenar cualquier tipo de dato, pero este enfoque debemos saber que ya ha quedado obsoleto, es mejor designar el tipo de dato que se va a almacenar. Por ejemplo para declarar una lista donde almacenemos datos de tipo String, podemos hacer lo siguiente:

List<String> ejemploLista = new ArrayList<String>();

Ahora que tenemos nuestra lista creada, vamos a incluir datos en ella, para esto utilizamos el método "add":

List<String> ejemploLista = new ArrayList<String>();
      ejemploLista.add("Juan");
      ejemploLista.add("Pedro");
      ejemploLista.add("José");
      ejemploLista.add("María");
      ejemploLista.add("Sofía");

Recordemos que existe un método el cual nos permite agregar el indice en el cual queremos insertar un elemento. Podemos obtener la cantidad de elementos que posee la lista:

ejemploLista.size();

Ahora vamos a consultar un valor de la lista, para esto utilizaremos el método "get":

ejemploLista.get(0);

El valor de 0 que estamos suministrado, es el indice que se encuentra de la información que queremos. En el ejemplo que estamos construyendo el valor que existe en el indice 0 esta el string Pedro

Si queremos acceder y mostrar por consola cada uno de los elementos que contiene la lista, podemos realizar lo siguiente

for (int i = 0; i < ejemploLista.size(); i++) {
            System.out.println(ejemploLista.get(i));
        }


Esto nos dará como resultado lo siguiente:


Cuando queremos eliminar un determinado elemento podemos utilizar el método "remove":

ejemploLista.remove(0);

Donde nuevamente el 0 representa el índice que queremos eliminar. Otra forma de eliminar un registro es por su nombre:

ejemploLista.remove("Juan");

Para ir finalizando este tipo de Lista, vamos a visualizar otro de los métodos que podemos utilizar. Si queremos extraer una lista que contenga los nombres entre un índice y otro podemos utilizar:

ejemploLista.subList(0, 2)

El cual tiene una lista derivada de la principal, con el ejemplo que venimos trabajando esta contendría dos valores que son [Juan,Pedro] 


Como observamos existen diferentes tipos de métodos para el manejo de este tipo de lista, ahora te toca a ti, aquellos métodos que falten puedes implementarlos con base al ejemplo que hemos trabajado

LinkedList:

esta implementación permite que mejore el rendimiento en ciertas ocasiones. Esta implementación se basa en una lista doblemente enlazada de los elementos, teniendo cada uno de los elementos un puntero al anterior y al siguiente elemento.

Para aprovechar las ventajas que tenemos en el coste temporal al trabajar con los extremos de la lista, se proporcionan métodos propios para acceder a ellos en tiempo constante

  • void addFirst(Object obj): nos permite añadir el objeto indicado al principio
  • void addLast(Object obj): con este podemos añadir un elemento al final de la lista
  • getFirst(): nos permite obtener el primer elemento de la lista
  • getLast(): este nos da como resultado el ultimo elemento de la lista
  • removeFirst(): este método nos permite extraer y eliminar el primer elemento de la lista
  • removeLats(): nos permite extraer y eliminar el ultimo elemento de la lista

  • Nota: Hemos de destacar que estos métodos nos permitirán trabajar con la lista como si se tratase de una pila o de una cola. En el caso de la pila realizaremos la inserción y la extracción de elementos por el mismo extremo, mientras que para la cola insertaremos por un extremo y extraeremos por el otro.

    Podemos observar un poco de este tipo de lista con el siguiente ejemplo:

    public class LinkedListPrueba{  
        public static void main(String args[]) 
        { 
            // Creamos el objeto de la clase linked list 
            LinkedList<String> object = new LinkedList<String>(); 
      
            // Añadimos los elementos a la lista linked list 
            object.add("A"); 
            object.add("B"); 
            object.addLast("C"); 
            object.addFirst("D"); 
            object.add(2, "E"); 
            object.add("F"); 
            object.add("G"); 
            System.out.println("Linked list : " + object); 
      
            // Removemos algunos de los elementos de la lista linked list 
            object.remove("B"); 
            object.remove(3); 
            object.removeFirst(); 
            object.removeLast(); 
            System.out.println("Linked list after deletion: " + object); 
      
            // Buscamos los elementos en la lista linked list 
            boolean status = object.contains("E"); 
      
            if(status) 
                System.out.println("List contains the element 'E' "); 
            else
                System.out.println("List doesn't contain the element 'E'"); 
      
            // Numero de elementos en la lista linked list 
            int size = object.size(); 
            System.out.println("Size of linked list = " + size); 
      
            // Mostramos un elemento y lo sobreescribimos linked list 
            Object element = object.get(2); 
            System.out.println("Element returned by get() : " + element); 
            object.set(2, "Y"); 
            System.out.println("Linked list after change : " + object); 
        } 
    }  
    
    La salida que nos muestra el código anterior es:
    Linked list : [D, A, E, B, C, F, G]
    Linked list after deletion: [A, E, F]
    List contains the element 'E' 
    Size of linked list = 3
    Element returned by get() : F
    Linked list after change : [A, E, Y]
    

    En esta parte del curso observamos una parte de las colecciones conocidas como Listas, de las cuales visualizamos como son utilizadas en Java. Ahora tu puedes seguir trabajando y revisando con algunos ejemplos de como utilizar esta colección.

    Última modificación: miércoles, 16 de marzo de 2022, 09:57