Svuotare e clonare
Fa parte della sezione Logica e flusso del percorso Java di Coddy. Lezione 27 di 59.
Il metodo clear() rimuove tutti gli elementi da un HashSet, lasciandolo vuoto.
Il metodo clone() restituisce una copia superficiale di HashSet. (Gli elementi stessi non vengono clonati.)
Ad esempio, crea prima un HashSet:
HashSet<String> set = new HashSet<>();
set.add("Coddy");Per clonare il set:
HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Output: [Coddy]Per svuotare l'insieme:
set.clear();
System.out.println(set.isEmpty());
// Output: truePerché abbiamo bisogno del casting con clone()?
Hai già imparato a usare il casting con i tipi primitivi (come int x = (int) 3.14). Lo stesso concetto si applica agli oggetti, ma per un motivo diverso.
Il metodo clone() restituisce un tipo generico Object, non un tipo specifico HashSet<String>. Questo perché clone() è definito nella classe Object e non sa quale tipo stai clonando.
// Cosa restituisce clone():
Object cloneResult = set.clone(); // Restituisce Object, non HashSet<String>
// Cosa ci serve:
HashSet<String> clonedSet = (HashSet<String>) set.clone(); // Converti Object → HashSet<String>Il cast dice a Java: «So che questo Object è in realtà un HashSet<String>, quindi trattalo come tale.»
Senza il cast, otterrai un errore di compilazione perché Java non convertirà automaticamente Object in HashSet<String>.
Sfida
FacileCrea un metodo denominato <strong>processSet</strong> che accetta in input un HashSet di stringhe. Il metodo deve:
- Clonare l'insieme.
- Svuotare l'insieme originale.
- Stampare l'insieme clonato e la sua dimensione nel formato:
Cloned Set: [elements]Cloned Set Size: X - Stampare l'insieme originale (dopo averlo svuotato) e la sua dimensione nel formato:
Original Set after clear: [elements]Original Set Size: Y
Provalo tu
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) {
// Scrivi il tuo codice qui
}
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);
}
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Array multidimensionali
Concetti di base degli array 2DAccesso agli elementi degli array 2DCicli annidati con array 2DRiepilogo - Array 2DAddizione e sottrazione di matriciArray irregolariArray 3D e oltreSchemi comuni degli array 2DRiepilogo - Tutto sugli array4HashSet Parte 1
Che cos'è un HashSet?Aggiungere un elementoRimuovere un elementoVerificare se un elemento esisteVuoto e dimensioneSvuotare e clonareRipasso - HashSet7Gestione di base degli errori
Nozioni di base su try-catchBlocco finallyLancio di eccezioniEccezioni personalizzate2HashMap Parte 1
Che cos'è una HashMap?Dichiarare una HashMapAccedere ai valoriVerificare se una chiave esisteModificare i dizionariRiepilogo - HashMap3HashMap Parte 2
Metodi di HashMapIterare con keySet()Iterare con entrySet()HashMap annidateRiepilogo - Gestire il magazzinoRiepilogo - Operazioni con HashMap6Flusso di controllo avanzato
Istruzioni con etichettaEspressione switchCorrispondenza dei patternClausole guardiaRiepilogo - Flusso di controllo9Progetto - Contatore di parole uniche
Inserimento e memorizzazione del testoElaborazione delle paroleEsercitati da solo: Compilatore Java online