Menu
CoddyTech

Limpiar y clonar

Parte de la sección Lógica y Flujo del Journey de Java de Coddy. Lección 27 de 59.

El método clear() elimina todos los elementos de un HashSet y lo deja vacío.

El método clone() devuelve una copia superficial del HashSet. (Los elementos en sí no se clonan.)

Por ejemplo, primero crea un HashSet:

HashSet<String> set = new HashSet<>();
set.add("Coddy");

Para clonar el conjunto:

HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Salida: [Coddy]

Para vaciar el conjunto:

set.clear();
System.out.println(set.isEmpty());
// Salida: true

¿Por qué necesitamos hacer una conversión de tipo con clone()?

Ya aprendiste sobre las conversiones de tipo con tipos primitivos (como int x = (int) 3.14). El mismo concepto se aplica a los objetos, pero por una razón diferente.

El método clone() devuelve un tipo genérico Object, no un HashSet<String> específico. Esto se debe a que clone() está definido en la clase Object y no sabe de qué tipo es el objeto que estás clonando.

// Lo que devuelve clone():
Object cloneResult = set.clone();  // Devuelve Object, no HashSet<String>

// Lo que necesitamos:
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // Convierte Object → HashSet<String>

La conversión de tipo le indica a Java: «Sé que este Object en realidad es un HashSet<String>, así que trátalo como tal».

Sin la conversión de tipo, obtendrás un error de compilación porque Java no convertirá automáticamente Object a HashSet<String>.

challenge icon

Desafío

Fácil

Crea un método llamado processSet que reciba como entrada un HashSet de Strings. El método debe:

  1. Clonar el conjunto.
  2. Vaciar el conjunto original.
  3. Imprimir el conjunto clonado y su tamaño con el formato:
    Cloned Set: [elements]
    Cloned Set Size: X
  4. Imprimir el conjunto original (después de vaciarlo) y su tamaño con el formato:
    Original Set after clear: [elements]
    Original Set Size: Y

Pruébalo tú mismo

import java.util.HashSet;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@SuppressWarnings("unchecked")

public class Main {
    public static void processSet(HashSet<String> set) {
        // Escribe tu código aquí
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String setString = scanner.nextLine();
        
        Type setType = new TypeToken<HashSet<String>>(){}.getType();
        HashSet<String> set = new Gson().fromJson(setString, setType);
        
        processSet(set);
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Java online