Menu
CoddyTech

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

Часть раздела Логика и управление потоком путешествия по 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);
// Вывод: [Coddy]

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

set.clear();
System.out.println(set.isEmpty());
// Вывод: 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

Задание

Легко

Создай метод с именем processSet, который принимает на вход 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