Conjuntos, colas

Tipos de datos y excepciones en Java

Jim White

Java Developer

Interfaz Set

  • Set también es un tipo de Collection
    • No permite objetos duplicados
      • Garantiza que cada elemento sea único
    • Los Set son, en general, no ordenados (por tanto, sin índice)
  • Las List son como un pastillero: cada objeto en un hueco concreto
  • Los Set son como un saco con objetos colocados al azar

Las listas son como pastilleros donde los objetos se guardan en un índice en una ubicación específica

Los conjuntos son como sacos que contienen objetos al azar y sin ordenar

1 Imágenes cortesía de Wikimedia Commons
Tipos de datos y excepciones en Java

List vs Set

  • Cuándo usar un Set
    • Garantiza la unicidad de sus elementos
    • Búsquedas más rápidas
      • Comprobar si un objeto está en un Set
    • Más eficiente en memoria a medida que crece la colección
    • Útil para pruebas de pertenencia en cachés
      • Ej.: encontrar palabras únicas en un documento
Tipos de datos y excepciones en Java

List vs Set

  • Cuándo usar una List
    • Conserva el orden y permite duplicados
    • Rinde mejor al acceder por posición
    • Rinde mejor al añadir/eliminar por índice
    • Útil cuando el orden importa
      • Ej.: gestionar pasos de una secuencia o canciones de una lista
Tipos de datos y excepciones en Java

Implementación de Set

  • Muchas implementaciones de Set
    • HashSet, una implementación popular
  • HashSet
    • Un saco desordenado de objetos
    • Más rápido que otras implementaciones de Set para insertar, borrar y buscar
    • Generalmente usa más memoria que otros Set
    • Permite almacenar un único null

Los HashSet son sacos desordenados de objetos y permiten un null

Tipos de datos y excepciones en Java

Construcción de HashSet

  • Usa el constructor genérico parametrizado para crear un HashSet
    HashSet<String> set = new HashSet<String>();
    
  • HashSet está en el paquete java.util
    • Requiere un import
    • import java.util.HashSet
Tipos de datos y excepciones en Java

Métodos de HashSet

  • Usa .add() y .remove() para añadir y eliminar objetos
  • Usa .remove() y luego .add() para reemplazar un objeto
  • Usa .contains() para comprobar si un objeto ya existe
  • Los duplicados se ignoran
  • Permite null
  • No garantiza orden
set.add("France");
set.add("Japan");
set.add("Brazil");
set.add("Egypt");
set.add(null); // null is allowed
set.remove("Brazil");
boolean z =
  set.contains("France"); // z is true
set.add("Japan"); // Ignored
System.out.println(set);
[null, Japan, Egypt, France]
Tipos de datos y excepciones en Java

Interfaz Queue

  • La estructura Queue procesa objetos en orden primero en entrar, primero en salir (FIFO)
    • El primer objeto añadido es el primero en salir
    • Como una cola en una taquilla
    • Tiene cabeza y cola

Imagen de una cola con la cabeza (inicio) y la cola (final) identificadas

  • Varias implementaciones de Queue
    • Similares en comportamiento y operaciones
Tipos de datos y excepciones en Java

ArrayBlockingQueue

  • Implementación popular de Queue
    • Un array por debajo
  • Atención: ArrayBlockingQueue está en el paquete java.util.concurrent
    • No en java.util
Tipos de datos y excepciones en Java

Construcción de ArrayBlockingQueue

  • Usa el constructor genérico parametrizado para crear una ArrayBlockingQueue
    • Tiene una capacidad o límite de cantidad indicado en el constructor
import java.util.concurrent;  // Al inicio de la clase

// Crear una nueva cola que puede guardar 4 Strings
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(4);
Tipos de datos y excepciones en Java

Métodos de ArrayBlockingQueue

  • Usa .add(object) o .offer(object) para añadir al final (tail)
    • .add(object) lanza excepción cuando la Queue está llena
    • .offer(object) ignora el nuevo objeto cuando está llena
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
queue.offer("France");
queue.offer("Japan");
queue.offer("Brazil");
queue.offer("Egypt");
queue.offer("China"); // Ignores China

// Causes IllegalStateException
// queue.add("China");

System.out.println(queue);
[France, Japan, Brazil, Egypt]
Tipos de datos y excepciones en Java

Métodos de ArrayBlockingQueue

  • Usa .remove() o .poll() para extraer del inicio (head)
    • .remove() lanza una excepción cuando la Queue está vacía
    • .poll() devuelve null cuando la Queue está vacía
  • No permite null
ArrayBlockingQueue<String> queue 
    = new ArrayBlockingQueue<String>(4);
String x = queue.poll(); // x is null
// Causes NoSuchElementException
// String y = queue.remove();

queue.offer("France");
String next = queue.poll();
System.out.println(next);
France
Tipos de datos y excepciones en Java

¡Vamos a practicar!

Tipos de datos y excepciones en Java

Preparing Video For Download...