Menu
Coddy logo textTech

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: true

Perché 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>.

challenge icon

Sfida

Facile

Crea un metodo denominato <strong>processSet</strong> che accetta in input un HashSet di stringhe. Il metodo deve:

  1. Clonare l'insieme.
  2. Svuotare l'insieme originale.
  3. Stampare l'insieme clonato e la sua dimensione nel formato:
    Cloned Set: [elements]
    Cloned Set Size: X
  4. 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);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Java online