Класс HashSet является частью Java Collections Framework, предоставляя быструю неупорядоченную коллекцию, не допускающую дублирования элементов. Он построен на основе HashMap, то есть наследует те же преимущества сложности, но фокусируется исключительно на уникальности элемента. В этой статье мы рассмотрим, как работает HashSet, что делает его уникальным и чем он отличается от других коллекций.
HashSet:
// Parameterized constructor with initial capacity SetsetWithInitialCapacity = new HashSet(5); // Parameterized constructor using a collection Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3)); // Default constructor with default capacity 16 Set set = new HashSet();
set.add(1); set.add(2); set.add(1); // Duplicate value is ignored System.out.println(set); // Output -> [1, 2]
Если вам нужно заменить повторяющиеся значения, а не игнорировать их, HashSet не будет правильным выбором. Это связано с тем, что приоритет отдается уникальности элемента.
// Parameterized constructor with initial capacity SetsetWithInitialCapacity = new HashSet(5); System.out.println(setWithInitialCapacity.size()); // Output -> 0
Несмотря на то, что емкость setWithInitialCapacity равна 5, размер равен 0, поскольку размер отражает количество элементов, присутствующих в наборе, а не начальную емкость. Вы можете думать о емкости как о внутреннем пространстве памяти, которое изменяется по мере добавления элементов.
// Parameterized constructor using a collection SetsetWithCollection = new HashSet(Arrays.asList(4, 4, 3)); System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]
Если вам нужно сохранить отсортированные элементы, рассмотрите возможность использования TreeSet, который обеспечивает расположение элементов в возрастающем порядке.
На собеседованиях часто задают вопрос, можете ли вы получить индекс элемента в HashSet. Ответ: Нет, потому что HashSet использует механизм хеширования для хранения элементов, а не структуру на основе индекса, такую как список или массив.
Поскольку HashSet поддерживается HashMap, он использует ключи карты для хранения элементов, в то время как значения не имеют значения. Вот почему каждый элемент в HashSet должен быть уникальным, как и ключи в HashMap.
HashSet — мощный инструмент, если вам нужна быстрая неупорядоченная коллекция, позволяющая избежать дублирования. Хотя он обеспечивает временную сложность O(1) для большинства операций, ему не хватает таких функций, как сортировка и индексирование. Разработчикам знание того, как HashSet связан с HashMap, помогает понять его внутреннюю работу и лучше использовать структуру коллекций.
В следующем посте мы рассмотрим общий вопрос на собеседовании, который часто задают на собеседованиях для проверки знаний кандидатов о концепциях коллекций.
Основы Java
Основы собеседования с Array
Основы памяти Java
Удачного программирования!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3