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 de 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 hacer una conversión de tipos con clone()?
Ya has aprendido sobre la conversión de tipos 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 tipo específico HashSet<String>. 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>La conversión le indica a Java: «Sé que este Object es en realidad un HashSet<String>, así que trátalo como tal».
Sin la conversión, obtendrás un error de compilación porque Java no convertirá automáticamente Object en HashSet<String>.
Desafío
FácilCrea un método llamado <strong>processSet</strong> que reciba un HashSet de Strings como entrada. El método debe:
- Clonar el conjunto.
- Limpiar el conjunto original.
- Imprimir el conjunto clonado y su tamaño con el formato:
Cloned Set: [elements]Cloned Set Size: X - Imprimir el conjunto original (después de limpiarlo) 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);
}
}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
1Arreglos Multidimensionales
Básicos de Arreglos 2DAccediendo a Elementos de Arreglos 2DBucles Anidados con Arreglos 2DResumen - Arreglos 2DSuma y Resta de MatricesArreglos IrregularesArreglos 3D y Más AlláPatrones Comunes de Arreglos 2DResumen - Todo Sobre Arreglos4HashSet Parte 1
¿Qué es un HashSet?Agregando un elementoEliminando un elementoComprobando si existe un elementoVacío y tamañoLimpiar y clonarResumen - HashSet7Manejo Básico de Errores
Básicos de Try-CatchBloque FinallyLanzamiento de ExcepcionesExcepciones Personalizadas2HashMap Parte 1
¿Qué es un HashMap?Declarar un HashMapAcceder a ValoresVerificar si una Clave ExisteModificar DiccionariosResumen - HashMap3HashMap Parte 2
Métodos de HashMapIterar con keySet()Iterar con entrySet()HashMap AnidadoResumen - Gestionar AlmacénResumen - Operaciones de HashMap6Flujo de Control Avanzado
Sentencias EtiquetadasExpresión SwitchCoincidencia de PatronesCláusulas de GuardiaResumen - Flujo de Control9Proyecto - Contador de Palabras Únicas
Entrada y Almacenamiento de TextoProcesamiento de PalabrasPractica por tu cuenta: Compilador de Java online