Listas

Las listas son estructuras de datos lineales (como se vio en la clasificación de la unidad de introducción) que permiten almacenar un conjunto ordenado de elementos y de esa manera darles un mejor tratamiento. Ejemplos de usos de las listas:

  1. Lista de números para realizar cálculos estadísticos.
  2. Lista de nombres de usuarios para un sistema de registro.
  3. Lista de productos en un carrito de compras.

Creación de una lista en java

Como puede verse en el siguiente código, tenemos dos formas de crear listas indexadas en java, una es utilizando la interfaz List y la otra es usando la clase ArrayList .

                    
import java.util.ArrayList;
import java.util.List;

public class Lista{
    public static void main(String[] args) {
        
        List < String > nombresA = new ArrayList<>();        
        ArrayList < String > nombresB = new ArrayList<>();        

    }    
}                    
                

¿Cual es la diferencia?

  1. List nombresA = new ArrayList<>();
    1. Declaración con interfaz: Aquí se declara una variable nombresA de tipo List. List es una interfaz que define un conjunto de métodos para trabajar con listas, como agregar, eliminar, buscar elementos, etc.
    2. Instanciación con clase concreta: Sin embargo, se instancia un objeto de la clase ArrayList, que es una implementación concreta de la interfaz List. Esta clase proporciona una implementación eficiente de las operaciones de una lista.
  2. List nombresB = new ArrayList<>();
    1. Declaración y creación directa: Aquí se declara una variable nombresB y se instancia directamente un objeto de la clase ArrayList.
    2. Menos flexible: Al especificar directamente ArrayList, se pierde cierta flexibilidad. Si en el futuro quisieras cambiar la implementación a otra clase que implemente List (por ejemplo, LinkedList), tendrías que modificar todas las referencias a ArrayList en tu código.

Dicho lo anterior, se recomienda la primera opción, ya que al declarar la variable como List, te estás acoplando al contrato definido por la interfaz List. Esto hace tu código más flexible y mantenible. Si en el futuro necesitas cambiar la implementación a otra clase que implemente List, solo tendrías que cambiar la línea de instanciación, y el resto de tu código seguiría funcionando sin cambios. Y por esa razón de ahora en adelande usaremos esa recomendación.

Métodos mas relevantes de las listas

  1. add(E e): Agrega un elemento al final de la lista.
  2. add(int index, E element): Inserta un elemento en una posición específica.
  3. get(int index): Devuelve el elemento en la posición indicada.
  4. size(): Devuelve el número de elementos en la lista.
  5. set(int index, E element): Reemplaza el elemento en la posición indicada.
  6. remove(int index): Elimina el elemento en la posición indicada.
  7. remove(Object o): Elimina la primera ocurrencia del elemento especificado.
  8. contains(Object o): Devuelve true si la lista contiene el elemento especificado.
  9. clear(): Elimina todos los elementos de la lista.
  10. isEmpty(): Devuelve true si la lista está vacía.
  11. indexOf(Object o): Devuelve el índice de la primera ocurrencia del elemento especificado, o -1 si no se encuentra.
  12. lastIndexOf(Object o): Devuelve el índice de la última ocurrencia del elemento especificado, o -1 si no se encuentra.

Ejemplo 1: de implementación de una lista en Java .

                    
import java.util.ArrayList;
import java.util.List;

public class Lista{
    public static void main(String[] args) {
        
        List < String > tripulacion = new ArrayList<>();        
        
        //Agregamos elementos con add()
        tripulacion.add("Zoro");
        tripulacion.add("Robin");
       //Contenido de la lista: [Zoro, Robin]
       
       //Agregamos un elemento en la posición 0
       tripulacion.add(0, "Luffy");
       System.out.println("Integrantes de los mugiwaras: "+tripulacion);
       // Indices                  0      1     2 
       //Contenido de la lista: [Luffy, Zoro, Robin]
        
       //Si queremos imprimir/obtener a Robin
       System.out.println(tripulacion.get(2));

       //Si quremos ver en que posición se encuentra Nami
       int indice = tripulacion.indexOf("Nami");
       System.out.println("Posición de Nami: "+ indice);
       // Como la tripulante nami no se encuentra, la variable indice vale -1

    }    
}                    
                

Ejemplo 2: de implementación de una lista Personalizada .

Para poder implementar una lista personalizada, primero debemos definir la clase con la estructura deseada.

En la siguiente clase llamada Personaje, se especifican 3 atributos, nombre, ocupacion y cargo, significa que si se crea una lista de tipo Personaje (es decir, que almacene objetos de tipo Personaje), cada indice de la lista podra almacenar un conjunto de datos y no solo uno, como en el ejemplo anterior.

También se especifica un constructor tradicional, un método para obtener información de los atributos y otro método para actualizar la información.

                    
                    
                

El siguiente código muestra la implementación de la clase Personaje definida anteriormente. La implementación se realiza a través de la creación de dos listas, piratas y marines, se les ingresa información y para el caso de piratas se hace uso del método getPersonaje(), para poder ver la información.

                    
import java.util.ArrayList;
import java.util.List;

public class Lista {

    public static void main(String[] args) {
        
        List< Personaje > piratas = new ArrayList<>();

        //Forma 1 de agregar un elmento a la lista personalizada
        
        Personaje nuevoPersonaje = new Personaje("Luffy", "Pirata", "Capital");
        piratas.add(nuevoPersonaje);
        nuevoPersonaje = new Personaje("Nami", "Pirata", "Navegante");
        piratas.add(nuevoPersonaje);
        
        //Forma 2 de agregar un elemento a la lista personalizada
        piratas.add(new Personaje("Boa Hancock", "Pirata", "capitana"));
        piratas.add(new Personaje("Sanji", "Pirata", "Cocinero"));

        List< Personaje > marines = new ArrayList<>();
        marines.add(new Personaje("Garp", "Marin","Vicealmirante"));
        marines.add(new Personaje("Kizaru", "Marin","Almirante"));
        marines.add(new Personaje("Akainu", "Marin", "Almirante de flota"));

        //Como es un lista de objetos, no se puede acceder directamente a la
        //información pasamdo como argumento la lista al mótodo print
        //Se debe realizar a travez de los métodos

        //acceder a Kizaru
        System.out.println(marines.get(1).getPersonaje());

        //Acceder a la lista completa de piratas
        for (int i = 0; i < piratas.size(); i++) {
            System.out.println(piratas.get(i).getPersonaje());
        }

    }
}