Interfaces Estructura De Datos

Interfaces estructura de datos

En Java, la API de Colecciones (parte del paquete java.util) proporciona una serie de interfaces y clases que permiten almacenar, manipular y recuperar datos de manera eficiente. Cuatro de las interfaces más utilizadas en esta API son List, Set, Map y Queue. A continuación, te explicaré cada una de estas interfaces clave, sus implementaciones más comunes, y sus características.


1. List: Una colección ordenada

La interfaz List representa una colección ordenada de elementos que pueden tener duplicados. Los elementos en una lista tienen un orden definido y son accesibles a través de un índice.

Características principales de List:

  • Orden de los elementos: Los elementos en una lista tienen un orden específico, por lo que el orden de inserción se conserva.
  • Acceso por índice: Los elementos pueden ser accedidos o modificados mediante un índice.
  • Permite duplicados: No hay restricciones para almacenar elementos duplicados en una lista.
  • Implementaciones comunes: ArrayList, LinkedList, Vector.

Ejemplo de uso de List:

import java.util.*;

public class ListExample {
    public static void main(String[] args) {
        // Crear una lista
        List<String> list = new ArrayList<>();

        // Agregar elementos a la lista
        list.add("Java");
        list.add("Python");
        list.add("JavaScript");
        list.add("Java");  // Permite duplicados

        // Acceder a elementos mediante índice
        System.out.println("Elemento en el índice 1: " + list.get(1));  // Salida: Python

        // Iterar sobre la lista
        for (String language : list) {
            System.out.println(language);
        }
    }
}

2. Set: Una colección sin duplicados

La interfaz Set representa una colección que no permite elementos duplicados. Aunque un Set no garantiza el orden de los elementos, en algunas implementaciones, como LinkedHashSet, se puede preservar el orden de inserción.

Características principales de Set:

  • No permite duplicados: Un Set no puede contener elementos duplicados.
  • Sin orden garantizado: El orden de los elementos no está garantizado (a menos que se use una implementación como LinkedHashSet o TreeSet).
  • Implementaciones comunes: HashSet, LinkedHashSet, TreeSet.

Ejemplo de uso de Set:

import java.util.*;

public class SetExample {
    public static void main(String[] args) {
        // Crear un Set
        Set<String> set = new HashSet<>();

        // Agregar elementos al Set
        set.add("Java");
        set.add("Python");
        set.add("JavaScript");
        set.add("Java");  // No se permite duplicados

        // Imprimir los elementos (sin duplicados)
        System.out.println(set);  // Salida: [Java, Python, JavaScript]
    }
}

3. Map: Una colección de pares clave-valor

La interfaz Map representa una colección de pares clave-valor. Cada elemento del Map se compone de una clave única y un valor asociado. A diferencia de List y Set, un Map no es una colección en sí, sino que almacena entradas de clave-valor.

Características principales de Map:

  • Claves únicas: Cada clave en un Map debe ser única, pero los valores pueden repetirse.
  • Acceso por clave: Los valores son accesibles a través de la clave correspondiente.
  • Implementaciones comunes: HashMap, LinkedHashMap, TreeMap, Hashtable.

Ejemplo de uso de Map:

import java.util.*;

public class MapExample {
    public static void main(String[] args) {
        // Crear un Map
        Map<String, Integer> map = new HashMap<>();

        // Agregar pares clave-valor
        map.put("Java", 1995);
        map.put("Python", 1991);
        map.put("JavaScript", 1995);

        // Acceder al valor por clave
        System.out.println("Año de creación de Java: " + map.get("Java"));  // Salida: 1995

        // Iterar sobre las claves y valores
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + " fue creado en " + entry.getValue());
        }
    }
}

4. Queue: Una colección de elementos en orden FIFO (First-In-First-Out)

La interfaz Queue representa una colección en la que los elementos se gestionan en el orden en que fueron insertados. Los elementos son procesados en el orden en que entraron (FIFO), lo que significa que el primer elemento agregado será el primero en ser retirado.

Características principales de Queue:

  • Orden FIFO: Los elementos se agregan y eliminan en un orden específico, primero en entrar, primero en salir (FIFO).
  • Operaciones principales: La principal operación de un Queue es la desencolada (remover el primer elemento).
  • Implementaciones comunes: LinkedList (implementa Queue), PriorityQueue, ArrayDeque.

Ejemplo de uso de Queue:

import java.util.*;

public class QueueExample {
    public static void main(String[] args) {
        // Crear un Queue
        Queue<String> queue = new LinkedList<>();

        // Agregar elementos al Queue
        queue.add("Java");
        queue.add("Python");
        queue.add("JavaScript");

        // Remover y mostrar el primer elemento
        System.out.println("Elemento desencolado: " + queue.poll());  // Salida: Java

        // Mostrar los elementos restantes en el Queue
        System.out.println(queue);  // Salida: [Python, JavaScript]
    }
}

Resumen Comparativo de List, Set, Map y Queue

Característica List Set Map Queue
Duplicados Permite duplicados No permite duplicados Claves únicas, valores pueden repetirse No permite duplicados en la cola
Acceso Acceso por índice Acceso no indexado, no ordenado Acceso por clave Acceso FIFO (primero en entrar, primero en salir)
Orden Orden definido por índice o implementación No garantiza el orden No garantiza el orden de las claves (salvo en LinkedHashMap y TreeMap) FIFO
Implementaciones comunes ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet HashMap, TreeMap, LinkedHashMap LinkedList, PriorityQueue, ArrayDeque