COMPARTE ESTE ARTÍCULO

📌 Introducción

En esta práctica vamos a trabajar con la interfaz Set de Java, una estructura de datos fundamental dentro del framework de colecciones que se caracteriza por no permitir elementos duplicados.

A lo largo del ejercicio veremos:

  • Eliminación de duplicados
  • Detección de elementos repetidos
  • Operaciones entre conjuntos
  • Ordenación automática con TreeSet
  • Navegación avanzada con NavigableSet
  • Uso de objetos personalizados con Set

🔹 Clase Usuario

Primero definimos una clase Usuario que utilizaremos en la última parte:

class Usuario {
    String nombre;
    int edad;

    public Usuario(String nombre, int edad) {
        this.nombre = nombre;
        this.edad = edad;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Usuario)) return false;
        Usuario u = (Usuario) o;
        return nombre.equals(u.nombre);
    }

    @Override
    public int hashCode() {
        return nombre.hashCode();
    }

    @Override
    public String toString() {
        return nombre + " (" + edad + ")";
    }
}

📌 En este caso, dos usuarios se consideran iguales si tienen el mismo nombre.


🔹 Parte 1: Eliminación de duplicados

String[] usuarios = {"Ana", "Luis", "Carlos", "Ana", "Pedro", "Luis", "Marta"};
Set<String> unicos = new HashSet<>(Arrays.asList(usuarios));

System.out.println("Usuarios únicos: " + unicos);
System.out.println("Total únicos: " + unicos.size());

👉 HashSet elimina automáticamente los duplicados.


🔹 Parte 2: Detección de duplicados

Set<String> uniques = new HashSet<>();
Set<String> duplicados = new HashSet<>();

for (String u : usuarios) {
    if (!uniques.add(u)) {
        duplicados.add(u);
    }
}

👉 Si add() devuelve false, significa que el elemento ya existía.


🔹 Parte 3: Operaciones entre conjuntos

Set<String> grupoA = new HashSet<>(Arrays.asList("Ana", "Luis", "Carlos"));
Set<String> grupoB = new HashSet<>(Arrays.asList("Carlos", "Marta", "Pedro"));

Set<String> union = new HashSet<>(grupoA);
union.addAll(grupoB);

Set<String> interseccion = new HashSet<>(grupoA);
interseccion.retainAll(grupoB);

Set<String> diferencia = new HashSet<>(grupoA);
diferencia.removeAll(grupoB);

👉 Estas operaciones representan:

  • Unión
  • Intersección
  • Diferencia

🔹 Parte 4: Ordenación con TreeSet

SortedSet<String> ordenados = new TreeSet<>(Arrays.asList(usuarios));

System.out.println("Ordenados: " + ordenados);
System.out.println("Primero: " + ordenados.first());
System.out.println("Ultimo: " + ordenados.last());

👉 TreeSet mantiene los elementos ordenados automáticamente.


🔹 Parte 5: Rangos

SortedSet<String> rango = ordenados.subSet("C", "P");
System.out.println("Entre C y P: " + rango);

👉 subSet() permite trabajar con subconjuntos por rango.


🔹 Parte 6: NavigableSet

NavigableSet<String> nav = new TreeSet<>(Arrays.asList("Ana", "Carlos", "Luis", "Marta", "Pedro"));

System.out.println("lower(Luis): " + nav.lower("Luis"));
System.out.println("floor(Luis): " + nav.floor("Luis"));
System.out.println("higher(Luis): " + nav.higher("Luis"));
System.out.println("ceiling(Luis): " + nav.ceiling("Luis"));

👉 Permite navegación avanzada dentro del conjunto.


🔹 Parte 7: Objetos personalizados con TreeSet

Set<Usuario> usuariosSet = new TreeSet<>(Comparator.comparingInt(u -> u.edad));

usuariosSet.add(new Usuario("Ana", 30));
usuariosSet.add(new Usuario("Luis", 25));
usuariosSet.add(new Usuario("Carlos", 35));
usuariosSet.add(new Usuario("Ana", 40));

👉 Se ordenan por edad automáticamente.

📌 Importante: si dos usuarios tienen la misma edad, el TreeSet puede considerarlos duplicados.


🎯 Conclusión

En esta práctica hemos aprendido:

  • Cómo evitar duplicados con Set
  • Cómo realizar operaciones entre conjuntos
  • Diferencias entre HashSet y TreeSet
  • Cómo trabajar con conjuntos ordenados
  • Uso de comparadores en estructuras avanzadas

🚀 Recomendación

Practica modificando este código:

  • Añade más campos a Usuario
  • Cambia el criterio de ordenación
  • Prueba con números en lugar de Strings

Esto te ayudará a dominar completamente las estructuras Set en Java.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
error: CONTENIDO PROTEGIDO