Cargando...

HashSet en Java

Crea un HashSet<String> llamado tags, llama tags.add("oak");, luego tags.add("pine");, luego tags.add("oak"); otra vez, e imprime tags.size(). Compila Bin.java y ejecuta java Bin. La pantalla debe mostrar una línea: 2. El segundo oak no creó un tercer valor. Valores únicos en un set es lo que enseña esta página.

Valores únicos, no pares clave-y-valor

En la página HashMap guardaste una clave que apuntaba a un valor con put y get. Un HashSet guarda valores solos. Cada valor aparece como máximo una vez. Si haces add de la misma palabra dos veces, el set sigue teniéndola una vez. No hay una cadena clave aparte en la ruta de enseñanza de esta página.
Abre Bin.java. Mantén el nombre de la clase pública Bin para que coincida con el nombre del archivo. Borra líneas sobrantes de HashMap, scores.put, scores.get y cualquier demo Desk. Esas pertenecen a la página del map. Borra también cualquier resto de ArrayList, Rack, Scanner o nextLine. El programa no debe esperar a que escribas.
Cerca de arriba, por encima de public class Bin, escribe:
import java.util.HashSet;
Ese import trae el tipo HashSet al alcance del nombre corto. Sin él, javac no ve el nombre corto HashSet en esta página. Escribe java.util y HashSet con cuidado. No inventes import java.util.*; como requisito aquí — un import exacto basta.
Dentro de main, crea el set:
HashSet<String> tags = new HashSet<String>();
Los ángulos llevan String porque esta lección guarda palabras. El nombre tags es el que conservas. La llamada new HashSet<String>() construye un set vacío. En este momento tiene cero valores.

Añade oak, pine, oak otra vez — luego size

Llama tags.add("oak"); en su propia línea. Luego llama tags.add("pine");. Luego llama tags.add("oak"); una tercera vez con la misma palabra. La tercera llamada no hace crecer el set. Luego escribe:
System.out.println(tags.size());
Imprime el tamaño, no el set entero, para el primer archivo que conservas. El número 2 demuestra que el duplicado se ignoró. Guarda antes de compilar.

Bin size after duplicate add

java
import java.util.HashSet;

public class Bin {
    public static void main(String[] args) {
        HashSet<String> tags = new HashSet<String>();
        tags.add("oak");
        tags.add("pine");
        tags.add("oak");
        System.out.println(tags.size());
    }
}

Desde la carpeta que guarda Bin.java, ejecuta javac Bin.java. Cuando paréntesis, llaves, ángulos y punto y coma coinciden, javac no escribe ninguna línea propia. Luego ejecuta java Bin — no java Bin.java ni java HashSet. Quita el final .java del comando de ejecución.
El programa debe imprimir una línea y parar: 2. No debe pedirte que escribas. Si la terminal espera entrada de teclado, aún queda una llamada nextLine de un ejercicio anterior en algún archivo. Borra esa llamada y conserva la creación, las tres líneas add y System.out.println(tags.size());.
Recorre la ejecución una vez. Java empieza en Bin.main. El import ya nombró qué HashSet quieres. La línea new construye un set vacío. El primer add guarda oak. El segundo guarda pine. El tercer add("oak") encuentra oak ya presente y no sube el conteo. La impresión de size() escribe 2. La pantalla muestra 2. Nada más debe imprimirse. Si ves 3, no estás ejecutando este archivo HashSet, o añadiste una tercera palabra distinta como elm. Si ves leaf, aún corre un demo HashMap de Desk — cambia a java Bin. Si ves [oak, pine] imprimiste el set entero en lugar de size(); conserva la impresión del tamaño para este primer archivo de enseñanza.
Si javac dice que no encuentra HashSet, falta la línea de import, está mal escrita o está después de public class Bin. Mueve import java.util.HashSet; encima de la línea de la clase. Si escribes tags.add(oak); sin comillas, javac trata oak como un nombre que falta. Conserva las comillas. No llames put en un HashSet en esta página — ese nombre pertenece a HashMap.

Pregunta con contains

Un segundo archivo Bin comprueba si oak está en el set después de los mismos dos primeros adds.

Bin contains oak

java
import java.util.HashSet;

public class Bin {
    public static void main(String[] args) {
        HashSet<String> tags = new HashSet<String>();
        tags.add("oak");
        tags.add("pine");
        System.out.println(tags.contains("oak"));
    }
}

Compila y ejecuta ese segundo archivo del mismo modo. La pantalla muestra true. La llamada contains("oak") pregunta si ese valor está en el set. Devuelve un boolean. Si preguntas contains("elm") después de añadir solo oak y pine, la pantalla mostraría false — eso es válido, pero el segundo archivo conservado usa "oak" para que la pantalla sea true.
No inventes un bucle sobre el set como requisito en esta página. Una página posterior — iterating — recorre colecciones. Quédate aquí con add, size y contains.

Lado a lado con HashMap

Una tabla corta mantiene clara la diferencia.

📊 HashSet vs HashMap

Piece On this page
store tags.add("oak"); — value only
duplicate second add("oak") does not grow size
read check tags.contains("oak") → true
HashMap leftover put / get — not this page’s path
La tabla es solo un recordatorio. Las piezas tipadas que conservas son el import de HashSet, la línea de creación, las llamadas add, size() y contains.

Comparado con HashMap y con ArrayList

En la página HashMap, put y get usaban una clave. En esta página, add y contains usan el valor mismo. Un archivo Desk sobrante que imprime leaf es otra lección. Para esta página conserva HashSet<String> tags y el demo de tamaño que imprime 2.
Un ArrayList puede guardar la misma palabra dos veces. Un HashSet no crece por un segundo add idéntico de esa palabra. Esa unicidad es el punto de esta lección. No mezcles tags.get(0) en los demos Bin — los sets no usan números de hueco de lista en esta página.
Cuando archivos viejos Desk.java o Rack.java aún estén cerca, déjalos o bórralos solo si confunden qué clase ejecutas. Ejecuta java Bin después de compilar el archivo HashSet de esta lección.

Lo que queda para iterating

Esta página abre un set de valores únicos. La página siguiente recorre colecciones con un bucle. Quédate aquí con add, size y contains. No inventes un for-each sobre el set como requisito en esta página; el objetivo de la lección es la unicidad y la pantalla 2 de size().

Antes de iterating

Puedes importar java.util.HashSet, crear HashSet<String> tags, añadir oak, pine y oak otra vez, y luego imprimir tags.size() para ver 2. Un segundo archivo puede imprimir tags.contains("oak") para ver true. Compila Bin.java y ejecuta java Bin para cada demo conservado. El set conservó valores únicos. La página siguiente es iterating, donde recorres los valores de una colección uno a uno.
Conserva el import encima de la clase. Conserva el add("oak") duplicado en el demo de tamaño para que el conteo siga en 2. Conserva contains para la comprobación boolean. Esos hábitos son el punto de control de esta página antes de seguir. Cuando size() muestre 2 después de tres adds con un oak repetido, HashSet hizo su trabajo para esta lección y estás listo para el tema siguiente.

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

❓
6
Preguntas
🎯
70%
Para Aprobar
♾️
∞
Tiempo
🔄
∞
Intentos

📝 Instrucciones

  • Lee cada pregunta cuidadosamente
  • Selecciona la mejor respuesta para cada pregunta
  • Puedes repetir el quiz tantas veces como quieras
  • Tu progreso se mostrará en la parte superior