Очистка и клонирование
Часть раздела Логика и управление потоком путешествия по 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>.
Задание
ЛегкоСоздайте метод с именем <strong>processSet</strong>, который принимает HashSet строк в качестве входного параметра. Метод должен:
- Клонировать множество.
- Очистить исходное множество.
- Вывести клонированное множество и его размер в формате:
Cloned Set: [elements]Cloned Set Size: X - Вывести исходное множество (после очистки) и его размер в формате:
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);
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиПовторение - 2D-массивыСложение и вычитание матрицРваные массивы3D-массивы и вышеРаспространённые паттерны 2D-массивовПовторение - всё о массивах4HashSet Часть 1
Что такое HashSet?Добавление элементаУдаление элементаПроверка наличия элементаПустота и размерОчистка и клонированиеПовторение - HashSet2HashMap Часть 1
Что такое HashMap?Объявление HashMapДоступ к значениямПроверка существования ключаИзменение словарейИтоги - HashMap3HashMap. Часть 2
Методы HashMapИтерация с keySet()Итерация с entrySet()Вложенный HashMapПовторение - Управление складомПовторение - Операции HashMap6Продвинутое управление потоком
Операторы метокВыражение switchСопоставление шаблоновОхранные клаузыИтоги - управление потоком9Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка слов