Leeren und Klonen
Teil des Abschnitts Logik & Ablauf der Java-Journey von Coddy. Lektion 27 von 59.
Die Methode clear() entfernt alle Elemente aus einem HashSet und lässt es leer zurück.
Die Methode clone() gibt eine flache Kopie des HashSet zurück. (Die Elemente selbst werden nicht geklont.)
Erstelle zum Beispiel zuerst ein HashSet:
HashSet<String> set = new HashSet<>();
set.add("Coddy");Um die Menge zu klonen:
HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Ausgabe: [Coddy]Um die Menge zu leeren:
set.clear();
System.out.println(set.isEmpty());
// Ausgabe: trueWarum benötigen wir beim Aufruf von clone() eine Typumwandlung?
Du hast bereits die Typumwandlung bei primitiven Typen kennengelernt (wie int x = (int) 3.14). Dasselbe Konzept gilt für Objekte, allerdings aus einem anderen Grund.
Die Methode clone() gibt den generischen Typ Object zurück, nicht einen spezifischen Typ wie HashSet<String>. Das liegt daran, dass clone() in der Klasse Object definiert ist und nicht weiß, welchen Typ du kopierst.
// Was clone() zurückgibt:
Object cloneResult = set.clone(); // Gibt Object zurück, nicht HashSet<String>
// Was wir brauchen:
HashSet<String> clonedSet = (HashSet<String>) set.clone(); // Object in HashSet<String> umwandelnDer Cast teilt Java mit: „Ich weiß, dass dieses Object eigentlich ein HashSet<String> ist, also behandle es auch so.“
Ohne den Cast erhältst du einen Kompilierungsfehler, weil Java Object nicht automatisch in HashSet<String> umwandelt.
Aufgabe
EinfachErstelle eine Methode namens processSet, die ein HashSet von Strings als Eingabe übernimmt. Die Methode soll:
- Die Menge klonen.
- Die ursprüngliche Menge leeren.
- Die geklonte Menge und ihre Größe im folgenden Format ausgeben:
Cloned Set: [elements]Cloned Set Size: X - Die ursprüngliche Menge (nach dem Leeren) und ihre Größe im folgenden Format ausgeben:
Original Set after clear: [elements]Original Set Size: Y
Probier es selbst
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) {
// Schreibe deinen Code hier
}
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);
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Mehrdimensionale Arrays
Grundlagen der 2D-ArraysZugriff auf 2D-Array-ElementeVerschachtelte Schleifen mit 2D-ArraysZusammenfassung - 2D-ArraysMatrixaddition & SubtraktionJagged Arrays3D-Arrays und darüber hinausGängige 2D-Array-MusterZusammenfassung - Alles über Arrays2HashMap Teil 1
Was ist eine HashMap?Eine HashMap deklarierenWerte abrufenPrüfen, ob ein Schlüssel existiertWörterbücher modifizierenZusammenfassung - HashMap3HashMap Teil 2
HashMap-MethodenMit keySet() iterierenMit entrySet() iterierenVerschachtelte HashMapZusammenfassung - Lager verwaltenZusammenfassung - HashMap-Operationen6Erweiterter Steuerungsfluss
Beschriftete AnweisungenSwitch-AusdruckMusterabgleichSchutzklauselnZusammenfassung - Steuerungsfluss9Projekt - Einzigartiger Wortzähler
Texteingabe und SpeicherungWortverarbeitungÜbe selbstständig: Online-Java-Compiler