Listas

Tipos de datos y excepciones en Java

Jim White

Java Developer

Interfaz List

  • Interfaz List, subinterfaz de Collection
    • Define un grupo de objetos ordenado
    • Puede contener objetos duplicados
  • Varias implementaciones de List
    • Todas se comportan de forma similar
    • La implementación determina cómo se gestionan los objetos internamente
Tipos de datos y excepciones en Java

Implementaciones de List

  • ArrayList: lista redimensionable, indexada (como los arrays), ordenada

ArrayList are similar to Java arrays with indexed elements

  • LinkedList: objetos conectados por enlaces al siguiente y anterior.

LinkedList are object lists connected by pointers

  • Independientemente de la implementación, añade, elimina y cambia objetos del mismo modo
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html for List types and details
Tipos de datos y excepciones en Java

ArrayList

  • Crea una instancia con new y usa genéricos para indicar el tipo de contenido
  • Añade un objeto al final con .add(object)
  • Accede a un objeto con .get(index)
    • ArrayList tiene índice basado en cero
  • Sustituye/cambia un objeto con .set(index, object)
  • Elimina un objeto con .remove(index)
  • Vacía todos los objetos con .clear()
  • Cuenta de objetos con .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Duplicates allowed
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Removes the first horse animals.remove(0); // Removes all objects animals.clear();
animals.size();
Tipos de datos y excepciones en Java

Objetos y primitivos

  • Usa envoltorios (wrappers) para añadir un primitivo a cualquier objeto del Collections Framework
  • Los primitivos añadidos se «autoboxean»
    • Autobox: proceso de envolver automáticamente un primitivo en su wrapper
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 se envuelve automáticamente en Integer y luego se añade
  • El autoboxing funciona con todos los objetos del Collections Framework
Tipos de datos y excepciones en Java

Colecciones heterogéneas

  • Las estructuras de datos del Collections Framework pueden ser heterogéneas
    • Heterogéneas = contienen objetos de distintos tipos
    • Usa Object como tipo parametrizado
ArrayList<Object> list = new ArrayList<Object>(); // Permite cualquier objeto
list.add(new Integer(5)); // Añade un Integer
list.add(6); // Añade un Integer usando autoboxing
list.add("Hello"); // Añade un String
Tipos de datos y excepciones en Java

Recorrer una List

  • Usa la sintaxis «for each» para iterar los objetos de una List
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // for-each para recorrer todo el ArrayList
    System.out.println(animal);
}
horse
cow
chicken
Tipos de datos y excepciones en Java

Imprimir una List con println

  • El contenido de una instancia de List (como ArrayList) puede mostrarse con println
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Muestra todos los elementos del ArrayList

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Muestra todos los elementos del ArrayList
[horse, cow, chicken]
[5, Hello]
Tipos de datos y excepciones en Java

LinkedList

  • LinkedList se construye igual que ArrayList
  • LinkedList tiene los mismos métodos que ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Create a new ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Add an object to the list
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Replace an object
System.out.println(cars); // Display the list
cars.remove(0); // Remove an object
cars.clear();  // Remove all objects
cars.size(); // Get the list length
[Ford, Toyota]
Tipos de datos y excepciones en Java

Métodos adicionales de LinkedList

  • Algunos métodos adicionales
    • addFirst() añade al inicio de la lista
    • addLast() añade al final
    • removeFirst() elimina del inicio
    • removeLast() elimina del final
cars.addFirst("Fiat"); // Add to the beginning
cars.addLast("BMW"); // Add the the end
cars.removeFirst(); // Remove the first object
cars.removeLast(); // Remove the last object
Tipos de datos y excepciones en Java

Similitudes entre tipos de colecciones

  • ArrayList y LinkedList se ven iguales
    • Otros tipos del Collections Framework también tendrán similitudes
    • Es intencionado
  • Comparten una interfaz: List
    • Un ejemplo de polimorfismo («muchas formas»)
Tipos de datos y excepciones en Java

ArrayList vs LinkedList

  • Las operaciones en ArrayList y LinkedList (o cualquier List) son las mismas
    • La elección del tipo de List depende del uso
  • Consideraciones de ArrayList:
    • Rápido en acceso aleatorio (ej.: list.get(11))
    • Más lento al añadir y eliminar en medio
    • Porque los objetos deben moverse físicamente al insertar/eliminar

Adding objects in the middle of an ArrayList requires lost of moving

Tipos de datos y excepciones en Java

ArrayList vs LinkedList

  • Consideraciones de LinkedList:
    • Más lento en acceso aleatorio (ej.: list.get(11))
    • Más rápido al añadir y eliminar en medio
    • Porque no se mueven objetos físicamente, solo cambian algunas referencias

Adding objects in the middle of a LinkedList only requires changing some pointers

Tipos de datos y excepciones en Java

¡Vamos a practicar!

Tipos de datos y excepciones en Java

Preparing Video For Download...