Publicado en Tema 8 • Ejercicios

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.