Menu
Coddy logo textTech

Очистка и клонирование

Часть раздела Логика и управление потоком путешествия по Java на Coddy. Урок 27 из 59.

Метод clear() удаляет все элементы из HashSet, оставляя его пустым.

Метод clone() возвращает поверхностную копию HashSet. (Сами элементы не клонируются.)

Например, сначала создайте HashSet:

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

Чтобы клонировать множество:

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

Чтобы очистить множество:

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

Почему нам нужно приведение типов с clone()?

Вы уже изучили приведение типов для примитивных типов (например, int x = (int) 3.14). Тот же принцип применяется к объектам, но по другой причине.

Метод clone() возвращает общий тип Object, а не конкретный HashSet<String>. Это потому, что clone() определён в классе Object и не знает, какой тип вы клонируете.

// Что возвращает clone():
Object cloneResult = set.clone();  // Возвращает Object, не HashSet<String>

// Что нам нужно:
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // Приведение Object → HashSet<String>

Приведение типов говорит Java: «Я знаю, что этот Object на самом деле является HashSet<String>, поэтому относись к нему как к такому.»

Без приведения типов вы получите ошибку компиляции, потому что Java не будет автоматически преобразовывать Object в HashSet<String>.

challenge icon

Задание

Легко

Создайте метод с именем <strong>processSet</strong>, который принимает HashSet строк в качестве входного параметра. Метод должен:

  1. Клонировать множество.
  2. Очистить исходное множество.
  3. Вывести клонированное множество и его размер в формате:
    Cloned Set: [elements]
    Cloned Set Size: X
  4. Вывести исходное множество (после очистки) и его размер в формате:
    Original Set after clear: [elements]
    Original Set Size: Y

Попробуйте сами

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) {
        // Напишите свой код здесь
    }
    
    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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Java