Класс Java HashSet: Руководство для начинающих
Введение
Привет, будущие разработчики Java! Сегодня мы погрузимся в увлекательный мир HashSet в Java. Не волнуйтесь, если вы новичок в программировании; я проведу вас по этому пути шаг за шагом, как я делал это для многих студентов на протяжении многих лет своей преподавательской деятельности. Представьте HashSet как магическую коробку, которая может хранить уникальные элементы - дубликаты не допускаются! Это как специальный ящик, в который вы можете положить только одну пару каждого типа носков. Давайте начнем!
Объявление класса
В Java HashSet является частью Java Collections Framework. Чтобы использовать его, сначала нужно импортировать:
import java.util.HashSet;
Основное объявление HashSet выглядит так:
HashSet<E> hs = new HashSet<E>();
Здесь 'E' является占位符ом для типа элементов, которые вы хотите хранить в вашем HashSet. Например, если вы хотите хранить строки:
HashSet<String> fruitBasket = new HashSet<String>();
Параметры
При создании HashSet вы можете указать два необязательных параметра:
- Начальная емкость: количество "корзин" HashSet будет использовать для хранения элементов.
- Фактор нагрузки: мера, насколько полный может быть HashSet, прежде чем он автоматически увеличится в размере.
Сейчас не стоит слишком много беспокоиться по этому поводу. Представьте их как расширенные настройки для вашей магической коробки!
Конструкторы класса
HashSet предоставляет четыре конструктора. Давайте рассмотрим каждый из них:
// Конструктор 1: Создает пустой HashSet с начальной емкостью по умолчанию (16) и фактором нагрузки (0.75)
HashSet<String> set1 = new HashSet<>();
// Конструктор 2: Создает HashSet, содержащий элементы указанной коллекции
Collection<String> collection = Arrays.asList("Apple", "Banana", "Cherry");
HashSet<String> set2 = new HashSet<>(collection);
// Конструктор 3: Создает пустой HashSet с указанной начальной емкостью и фактором нагрузки по умолчанию (0.75)
HashSet<String> set3 = new HashSet<>(20);
// Конструктор 4: Создает пустой HashSet с указанной начальной емкостью и фактором нагрузки
HashSet<String> set4 = new HashSet<>(20, 0.8f);
Методы класса
Вот таблица наиболее часто используемых методов HashSet:
Метод | Описание |
---|---|
add(E e) | Добавляет указанный элемент в это множество, если он еще не присутствует |
clear() | Удаляет все элементы из этого множества |
contains(Object o) | Возвращает true, если это множество содержит указанный элемент |
isEmpty() | Возвращает true, если это множество не содержит элементов |
remove(Object o) | Удаляет указанный элемент из этого множества, если он присутствует |
size() | Возвращает количество элементов в этом множестве |
Наследованные методы
HashSet наследует методы от своих родительских классов. Некоторые заметные из них включают:
- Из Set: addAll(), containsAll(), equals(), hashCode(), removeAll(), retainAll()
- Из Collection: iterator(), toArray()
- Из Object: clone(), finalize(), getClass(), notify(), notifyAll(), wait()
Пример добавления элементов в HashSet
Давайте применим наши знания на интересном примере. Представьте, что мы создаем программу для отслеживания уникальных вкусов мороженого в нашем магазине:
import java.util.HashSet;
public class IceCreamShop {
public static void main(String[] args) {
// Создаем новый HashSet для хранения вкусов мороженого
HashSet<String> flavors = new HashSet<>();
// Добавляем некоторые вкусы
flavors.add("Vanilla");
flavors.add("Chocolate");
flavors.add("Strawberry");
flavors.add("Mint Chip");
// Пытаемся добавить дубликат
boolean added = flavors.add("Vanilla");
System.out.println("Vanilla добавлен повторно? " + added);
System.out.println("Наши вкусы мороженого: " + flavors);
System.out.println("У нас " + flavors.size() + " уникальных вкусов!");
// Проверяем, есть ли у нас определенный вкус
String searchFlavor = "Rocky Road";
if (flavors.contains(searchFlavor)) {
System.out.println("Да, у нас есть " + searchFlavor + "!");
} else {
System.out.println("Извините, у нас нет " + searchFlavor + ".");
}
// Удаляем вкус
flavors.remove("Strawberry");
System.out.println("Обновленные вкусы после удаления Strawberry: " + flavors);
}
}
Вывод
Когда вы выполните эту программу, вы увидите что-то вроде этого:
Vanilla добавлен повторно? false
Наши вкусы мороженого: [Vanilla, Mint Chip, Chocolate, Strawberry]
У нас 4 уникальных вкуса!
Извините, у нас нет Rocky Road.
Обновленные вкусы после удаления Strawberry: [Vanilla, Mint Chip, Chocolate]
Разберем, что произошло:
- Мы создали HashSet под названием
flavors
для хранения наших вкусов мороженого. - Мы добавили четыре вкуса: Ваниль, Шоколад, Ягодный и Мятно-шоколадный.
- Мы попытались добавить Ваниль еще раз, но метод
add()
вернулfalse
, так как HashSet не допускает дубликатов. - Мы вывели все наши вкусы. Заметьте, порядок может отличаться от того, в котором мы добавляли их - HashSet не поддерживает порядок вставки.
- Мы проверили, есть ли у нас вкус Rocky Road с помощью
contains()
. Нет, поэтому вывелось сообщение с извинением. - Наконец, мы удалили Ягодный и вывели обновленный набор вкусов.
Итак, у вас есть! Вы только что создали свой первый HashSet и использовали некоторые из его самых важных методов. Помните, HashSet отлично подходит, когда вам нужно хранить уникальные элементы и не важен порядок. Это как мешок с мармеладом, где каждый мармелад является разным цветом - вы легко можете проверить, есть ли у вас определенный цвет, но вы не можете контролировать порядок, в котором они выходят, когда вы высыпаете мешок.
Когда вы продолжите свое путешествие по Java, вы обнаружите, что HashSet чрезвычайно полезен во многих сценариях. Практикуйтесь и скоро станете профи в использовании HashSet! Счастливого кодирования!
Credits: Image by storyset