Очистка и клонирование
Часть раздела Логика и управление потоком путешествия по 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
Попробуйте сами
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Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка словПотренируйтесь самостоятельно: Онлайн-компилятор Java