Menu
CoddyTech

Vider et Cloner

Fait partie de la section Logique & Flux du Journey Java de Coddy. Leçon 27 sur 59.

La méthode clear() supprime tous les éléments d’un HashSet, le laissant vide.

La méthode clone() renvoie une copie superficielle du HashSet. (Les éléments eux-mêmes ne sont pas clonés.)

Par exemple, créez d’abord un HashSet :

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

Pour cloner l’ensemble :

HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Sortie : [Coddy]

Pour vider l’ensemble :

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

Pourquoi avons-nous besoin d’un transtypage avec clone() ?

Tu as déjà appris le transtypage avec les types primitifs (comme int x = (int) 3.14). Le même concept s’applique aux objets, mais pour une raison différente.

La méthode clone() renvoie un type générique Object, et non un type spécifique HashSet<String>. Cela s’explique par le fait que clone() est définie dans la classe Object et ne sait pas quel type tu clones.

// Ce que renvoie clone() :
Object cloneResult = set.clone();  // Renvoie Object, pas HashSet<String>

// Ce dont nous avons besoin :
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // Convertir Object → HashSet<String>

La conversion indique à Java : « Je sais que cet Object est en réalité un HashSet<String>, alors traite-le comme tel. »

Sans la conversion, tu obtiendras une erreur de compilation, car Java ne convertira pas automatiquement Object en HashSet<String>.

challenge icon

Défi

Facile

Créez une méthode nommée processSet qui prend en entrée un HashSet de chaînes. La méthode doit :

  1. Cloner l’ensemble.
  2. Vider l’ensemble d’origine.
  3. Afficher l’ensemble cloné et sa taille au format :
    Cloned Set: [elements]
    Cloned Set Size: X
  4. Afficher l’ensemble d’origine (après l’avoir vidé) et sa taille au format :
    Original Set after clear: [elements]
    Original Set Size: Y

Essayez vous-même

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) {
        // Écrivez votre code ici
    }
    
    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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur Java en ligne