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

Шпаргалка

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

set.clear();

Метод clone() возвращает поверхностную копию HashSet:

HashSet<String> clonedSet = (HashSet<String>) set.clone();

Почему требуется приведение типов: Метод clone() возвращает общий тип Object, поэтому вы должны привести его к HashSet<String>, чтобы использовать как конкретный тип.

Пример использования:

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

// Clone the set (cast Object → HashSet<String>)
HashSet<String> clonedSet = (HashSet<String>) set.clone();

// Clear original set
set.clear();
System.out.println(set.isEmpty()); // Output: true
System.out.println(clonedSet);      // Output: [Coddy] (clone unaffected)

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

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Проверьте себя

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

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