Czyszczenie i klonowanie
Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 27 z 59.
Metoda clear() usuwa wszystkie elementy z zestawu HashSet, pozostawiając go pustym.
Metoda clone() zwraca płytką kopię HashSet. (Same elementy nie są klonowane.)
Na przykład najpierw utwórz HashSet:
HashSet<String> set = new HashSet<>();
set.add("Coddy");Aby sklonować zbiór:
HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Wynik: [Coddy]Aby wyczyścić zbiór:
set.clear();
System.out.println(set.isEmpty());
// Wynik: trueDlaczego potrzebujemy rzutowania przy użyciu clone()?
Wiesz już, jak rzutować typy prymitywne (na przykład int x = (int) 3.14). Ta sama koncepcja dotyczy obiektów, ale z innego powodu.
Metoda clone() zwraca ogólny typ Object, a nie konkretny typ HashSet<String>. Dzieje się tak, ponieważ metoda clone() jest zdefiniowana w klasie Object i nie wie, jaki typ klonujesz.
// Co zwraca clone():
Object cloneResult = set.clone(); // Zwraca Object, a nie HashSet<String>
// Czego potrzebujemy:
HashSet<String> clonedSet = (HashSet<String>) set.clone(); // Rzutuj Object → HashSet<String>Rzutowanie mówi Javie: „Wiem, że ten obiekt to tak naprawdę HashSet<String>, więc traktuj go jak taki obiekt”.
Bez rzutowania pojawi się błąd kompilacji, ponieważ Java nie przekonwertuje automatycznie Object na HashSet<String>.
Wyzwanie
ŁatwyUtwórz metodę o nazwie <strong>processSet</strong>, która przyjmuje jako dane wejściowe zbiór HashSet ciągów znaków. Metoda powinna:
- Sklonować zbiór.
- Wyczyścić oryginalny zbiór.
- Wypisać sklonowany zbiór i jego rozmiar w formacie:
Cloned Set: [elements]Cloned Set Size: X - Wypisać oryginalny zbiór (po wyczyszczeniu) i jego rozmiar w formacie:
Original Set after clear: [elements]Original Set Size: Y
Spróbuj swoich sił
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) {
// Napisz tutaj swój kod
}
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);
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DDodawanie i odejmowanie macierzyTablice postrzępioneTablice 3D i większeTypowe wzorce dla tablic 2DPodsumowanie — wszystko o tablicach4HashSet — część 1
Czym jest HashSet?Dodawanie elementuUsuwanie elementuSprawdzanie, czy element istniejePusty i rozmiarCzyszczenie i klonowaniePodsumowanie — HashSet2HashMap część 1
Czym jest HashMap?Deklarowanie HashMapDostęp do wartościSprawdzanie, czy klucz istniejeModyfikowanie słownikówPodsumowanie — HashMap3HashMap — część 2
Metody HashMapIterowanie za pomocą keySet()Iterowanie za pomocą entrySet()Zagnieżdżona HashMapPowtórka — zarządzanie magazynemPowtórka — operacje na HashMap6Zaawansowany przepływ sterowania
Instrukcje etykietująceWyrażenie switchDopasowywanie wzorcówKlauzule ochronnePowtórzenie — przepływ sterowania9Projekt — licznik unikalnych słów
Wprowadzanie i przechowywanie tekstuPrzetwarzanie słówPoćwicz samodzielnie: Kompilator Java online