Menu
Coddy logo textTech

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, dejándolo 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);
// Output: [Coddy]

Para vaciar el conjunto:

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

¿Por qué necesitamos el casting con clone()?

Ya has aprendido sobre el casting 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 Object genérico, no un HashSet<String> específico. Esto se debe a que clone() está definido en la clase Object y no sabe qué tipo estás clonando.

// What clone() returns:
Object cloneResult = set.clone();  // Returns Object, not HashSet<String>

// What we need:
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // Cast Object → HashSet<String>

El cast le dice a Java: "Sé que este Object es en realidad un HashSet<String>, así que trátalo como tal."

Sin el cast, 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 <strong>processSet</strong> que toma un HashSet de Strings como entrada. El método debe:

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

Hoja de referencia

El método clear() elimina todos los elementos de un HashSet:

set.clear();

El método clone() devuelve una copia superficial del HashSet:

HashSet<String> clonedSet = (HashSet<String>) set.clone();

Por qué es necesario el casting: El método clone() devuelve un tipo genérico Object, por lo que debes convertirlo a HashSet<String> para usarlo como el tipo específico.

Ejemplo de uso:

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

// Clone the set (cast Object → HashSet<String>)
HashSet<String> clonedSet = (HashSet<String>) set.clone();

// Clear original set
set.clear();
System.out.println(set.isEmpty()); // Output: true
System.out.println(clonedSet);      // Output: [Coddy] (clone unaffected)

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