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
Setno puede contener elementos duplicados. - Sin orden garantizado: El orden de los elementos no está garantizado (a menos que se use una implementación como
LinkedHashSetoTreeSet). - 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
Mapdebe 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
Queuees la desencolada (remover el primer elemento). - Implementaciones comunes:
LinkedList(implementaQueue),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 |