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>.
Desafío
FácilCrea un método llamado processSet que reciba como entrada un HashSet de Strings. El método debe:
- Clonar el conjunto.
- Vaciar 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 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);
}
}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