Ejercicio 6: Tres Retos con Conjuntos (Set)
Enunciado
Para dominar las colecciones de tipo Set, vamos a resolver tres retos prácticos que demuestran las diferencias entre sus implementaciones principales: el orden aleatorio, el orden alfabético y el orden de inserción.
Reto 1: El Control de Aduanas (HashSet)
Crea un programa que pida 5 nombres de países. Si el usuario repite uno, el programa debe avisar: "¡Ese ya pasó por la frontera!". Al final, muestra cuántos países únicos hay.
Reto 2: El Ranking de Videojuegos (TreeSet)
Usa un TreeSet para guardar nombres de videojuegos. Pide 5 nombres y observa cómo aparecen ordenados alfabéticamente de forma automática.
Reto 3: La Memoria de Pez (LinkedHashSet)
Demuestra que LinkedHashSet "recuerda" exactamente el orden en el que escribiste los elementos, a diferencia de un HashSet normal.
Solución: Reto 1 - Control de Aduanas
Utilizamos HashSet porque no nos importa el orden, pero sí necesitamos que el método add() nos devuelva false si el elemento es un duplicado.
package Tema8.Ejercicios.ejercicio6;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class ControlAduanas {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
Set<String> paises = new HashSet<>();
while (paises.size() < 5) {
System.out.print("Introduce un país: ");
String pais = teclado.nextLine();
if (!paises.add(pais)) {
System.out.println("¡Ese ya pasó por la frontera!");
}
}
System.out.println("Total de países únicos registrados: " + paises.size());
}
}
Solución: Reto 2 - Ranking de Videojuegos
El TreeSet ordena los elementos según su orden natural (alfabético para Strings) al ser insertados.
package Tema8.Ejercicios.ejercicio6;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class RankingVideojuegos {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
Set<String> juegos = new TreeSet<>();
for (int i = 0; i < 5; i++) {
System.out.print("Introduce el nombre del juego: ");
juegos.add(teclado.nextLine());
}
System.out.println("Lista de juegos ordenada (A-Z): " + juegos);
}
}
Solución: Reto 3 - La Memoria de Pez
En este ejemplo, si usamos LinkedHashSet, Java mantendrá el orden cronológico de inserción.
package Tema8.Ejercicios.ejercicio6;
import java.util.LinkedHashSet;
import java.util.Set;
public class MemoriaDePez {
public static void main(String[] args) {
// Usamos LinkedHashSet para mantener el orden de inserción
Set<String> colores = new LinkedHashSet<>();
colores.add("Amarillo");
colores.add("Rojo");
colores.add("Azul");
colores.add("Verde");
System.out.println("Orden que recuerda Java (inserción): " + colores);
}
}
Resumen de Implementaciones
| Tipo de Set | Ordenación |
|---|---|
| HashSet | Sin orden garantizado (muy rápido). |
| TreeSet | Orden natural o alfabético. |
| LinkedHashSet | Orden según fueron añadidos. |