Spec-Zone.ru › OpenJDK 25

Класс HashSet<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<E>
java.util.HashSet<E>
Параметры типа:
E - тип элементов, хранящихся в этом множестве
Все реализуемые интерфейсы:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>
Прямые известные подклассы:
JobStateReasons, LinkedHashSet
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable
Этот класс реализует интерфейс Set на основе хеш-таблицы (фактически, экземпляра HashMap). Он не дает никаких гарантий относительно порядка итерации по множеству; в частности, он не гарантирует, что порядок останется неизменным с течением времени. Этот класс допускает элемент null.

Этот класс обеспечивает постоянное время выполнения основных операций (add, remove, contains и size) при условии, что хеш-функция правильно распределяет элементы по корзинам. Итерация по этому множеству требует времени, пропорционального сумме размера экземпляра HashSet (количества элементов) и «емкости» базового экземпляра HashMap (количества корзин). Поэтому, если важна производительность итерации, очень важно не задавать слишком большую начальную емкость (или слишком низкий коэффициент загрузки).

Обратите внимание, что эта реализация не является синхронизированной. Если к хеш-множеству одновременно обращаются несколько потоков и хотя бы один из них изменяет множество, доступ должен быть синхронизирован извне. Обычно для этого синхронизируются по объекту, который естественным образом содержит множество. Если такого объекта нет, множество следует «обернуть» с помощью метода Collections.synchronizedSet. Лучше всего сделать это при создании множества, чтобы предотвратить случайный несинхронизированный доступ к нему:

  Set s = Collections.synchronizedSet(new HashSet(...));

Итераторы, возвращаемые методом iterator этого класса, работают по принципу fail-fast: если множество изменяется после создания итератора любым способом, кроме вызова собственного метода remove итератора, Iterator выбрасывает исключение ConcurrentModificationException. Таким образом, при параллельном изменении итератор быстро и корректно завершается с ошибкой, а не допускает произвольного, недетерминированного поведения в неопределенный момент в будущем.

Обратите внимание, что поведение итератора по принципу fail-fast не может быть гарантировано, поскольку, вообще говоря, невозможно дать строгие гарантии при несинхронизированном параллельном изменении. Итераторы fail-fast выбрасывают ConcurrentModificationException по возможности. Поэтому было бы неправильно писать программу, корректность которой зависит от этого исключения: поведение итераторов fail-fast следует использовать только для обнаружения ошибок.

Этот класс входит в состав Java Collections Framework.

Начиная с:
1.2
См. также:
  • Collection
  • Set
  • TreeSet
  • HashMap
  • Сериализованная форма

Краткое описание конструкторов

Конструктор Описание
HashSet()
Создает новое пустое множество; базовый экземпляр HashMap имеет начальную емкость по умолчанию (16) и коэффициент загрузки по умолчанию (0.75).
HashSet(int initialCapacity)
Создает новое пустое множество; базовый экземпляр HashMap имеет указанную начальную емкость и коэффициент загрузки по умолчанию (0.75).
HashSet(int initialCapacity, float loadFactor)
Создает новое пустое множество; базовый экземпляр HashMap имеет указанную начальную емкость и указанный коэффициент загрузки.
HashSet(Collection<? extends E> c)
Создает новое множество, содержащее элементы указанной коллекции.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Добавляет указанный элемент в это множество, если он еще не присутствует.
void clear()
Удаляет все элементы из этого множества.
Object clone()
Возвращает поверхностную копию этого экземпляра HashSet: сами элементы не клонируются.
boolean contains(Object o)
Возвращает true, если это множество содержит указанный элемент.
boolean isEmpty()
Возвращает true, если множество не содержит элементов.
Iterator<E> iterator()
Возвращает итератор по элементам этого множества.
static <T> HashSet<T> newHashSet(int numElements)
Создает новое пустое HashSet, подходящее для ожидаемого количества элементов.
boolean remove(Object o)
Удаляет указанный элемент из этого множества, если он присутствует.
int size()
Возвращает количество элементов в этом множестве (его мощность).
Spliterator<E> spliterator()
Создает привязываемый с задержкой и работающий по принципу fail-fast Spliterator для элементов этого множества.
Object[] toArray()
Возвращает массив, содержащий все элементы этой коллекции.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этой коллекции; тип возвращаемого массива во время выполнения совпадает с типом указанного массива.

Методы, объявленные в классе AbstractSet

equals, hashCode, removeAll

Методы, объявленные в классе AbstractCollection

addAll, containsAll, retainAll, toArray, toArray, toString

Методы, объявленные в классе Object

finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе Collection

parallelStream, removeIf, stream, toArray

Методы, объявленные в интерфейсе Iterable

forEach

Методы, объявленные в интерфейсе Set

addAll, containsAll, equals, hashCode, removeAll, retainAll

Подробное описание конструкторов

HashSet

public HashSet()
Создает новое пустое множество; базовый экземпляр HashMap имеет начальную емкость по умолчанию (16) и коэффициент загрузки по умолчанию (0.75).

HashSet

public HashSet(Collection<? extends E> c)
Создает новое множество, содержащее элементы указанной коллекции. HashMap создается с коэффициентом загрузки по умолчанию (0.75) и начальной емкостью, достаточной для размещения элементов указанной коллекции.
Параметры:
c - коллекция, элементы которой следует поместить в это множество
Исключения:
NullPointerException - если указанная коллекция равна null

HashSet

public HashSet(int initialCapacity, float loadFactor)
Создает новое пустое множество; базовый экземпляр HashMap имеет указанную начальную емкость и указанный коэффициент загрузки.
Примечание к API:
Чтобы создать HashSet с начальной емкостью, рассчитанной на ожидаемое количество элементов, используйте newHashSet.
Параметры:
initialCapacity - начальная емкость хеш-отображения
loadFactor - коэффициент загрузки хеш-отображения
Исключения:
IllegalArgumentException - если начальная емкость меньше нуля или коэффициент загрузки неположителен

HashSet

public HashSet(int initialCapacity)
Создает новое пустое множество; базовый экземпляр HashMap имеет указанную начальную емкость и коэффициент загрузки по умолчанию (0.75).
Примечание к API:
Чтобы создать HashSet с начальной емкостью, рассчитанной на ожидаемое количество элементов, используйте newHashSet.
Параметры:
initialCapacity - начальная емкость хеш-таблицы
Исключения:
IllegalArgumentException - если начальная емкость меньше нуля

Подробное описание методов

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам этого множества. Элементы возвращаются в произвольном порядке.
Определено в:
iterator в интерфейсе Collection<E>
Определено в:
iterator в интерфейсе Iterable<E>
Определено в:
iterator в интерфейсе Set<E>
Определено в:
iterator в классе AbstractCollection<E>
Возвращает:
Iterator по элементам этого множества
См. также:
  • ConcurrentModificationException

size

public int size()
Возвращает количество элементов в этом множестве (его мощность).
Определено в:
size в интерфейсе Collection<E>
Определено в:
size в интерфейсе Set<E>
Возвращает:
количество элементов в этом множестве (его мощность)

isEmpty

public boolean isEmpty()
Возвращает true, если множество не содержит элементов.
Определено в:
isEmpty в интерфейсе Collection<E>
Определено в:
isEmpty в интерфейсе Set<E>
Переопределяет:
isEmpty в классе AbstractCollection<E>
Возвращает:
true, если множество не содержит элементов

contains

public boolean contains(Object o)
Возвращает true, если это множество содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда это множество содержит элемент e, для которого выполняется Objects.equals(o, e).
Определено в:
contains в интерфейсе Collection<E>
Определено в:
contains в интерфейсе Set<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o - элемент, наличие которого в этом множестве необходимо проверить
Возвращает:
true, если это множество содержит указанный элемент

add

public boolean add(E e)
Добавляет указанный элемент в это множество, если он еще не присутствует. Более формально, добавляет указанный элемент e в это множество, если множество не содержит элемента e2, для которого выполняется Objects.equals(e, e2). Если множество уже содержит этот элемент, вызов не изменяет множество и возвращает false.
Определено в:
add в интерфейсе Collection<E>
Определено в:
add в интерфейсе Set<E>
Переопределяет:
add в классе AbstractCollection<E>
Параметры:
e - элемент, добавляемый в это множество
Возвращает:
true, если это множество еще не содержало указанный элемент

remove

public boolean remove(Object o)
Удаляет указанный элемент из этого множества, если он присутствует. Более формально, удаляет элемент e, для которого выполняется Objects.equals(o, e), если множество содержит такой элемент. Возвращает true, если множество содержало этот элемент (или, что равнозначно, если множество изменилось в результате вызова). (После возврата вызова множество не будет содержать этот элемент.)
Определено в:
remove в интерфейсе Collection<E>
Определено в:
remove в интерфейсе Set<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o - объект, который необходимо удалить из этого множества, если он присутствует
Возвращает:
true, если множество содержало указанный элемент

clear

public void clear()
Удаляет все элементы из этого множества. После возврата вызова множество будет пустым.
Определено в:
clear в интерфейсе Collection<E>
Определено в:
clear в интерфейсе Set<E>
Переопределяет:
clear в классе AbstractCollection<E>

clone

public Object clone()
Возвращает поверхностную копию этого экземпляра HashSet: сами элементы не клонируются.
Переопределяет:
clone в классе Object
Возвращает:
поверхностную копию этого множества
См. также:
  • Cloneable

spliterator

public Spliterator<E> spliterator()
Создает привязываемый с задержкой и работающий по принципу fail-fast Spliterator для элементов этого множества.

Spliterator сообщает о характеристиках Spliterator.SIZED и Spliterator.DISTINCT. В переопределяющих реализациях следует документировать сведения о дополнительных значениях характеристик.

Определено в:
spliterator в интерфейсе Collection<E>
Определено в:
spliterator в интерфейсе Iterable<E>
Определено в:
spliterator в интерфейсе Set<E>
Возвращает:
Spliterator для элементов этого множества
Начиная с:
1.8

toArray

public Object[] toArray()
Описание скопировано из класса: AbstractCollection
Возвращает массив, содержащий все элементы этой коллекции. Если коллекция гарантирует определенный порядок возврата элементов итератором, этот метод должен возвращать элементы в том же порядке. Тип компонента во время выполнения возвращаемого массива — Object.

Возвращаемый массив является «безопасным»: эта коллекция не хранит ссылок на него. (Иными словами, этот метод должен выделять новый массив, даже если коллекция основана на массиве.) Поэтому вызывающий код может свободно изменять возвращенный массив.

Определено в:
toArray в интерфейсе Collection<E>
Определено в:
toArray в интерфейсе Set<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Возвращает:
массив, тип компонента которого во время выполнения — Object, содержащий все элементы этой коллекции

toArray

public <T> T[] toArray(T[] a)
Описание скопировано из класса: AbstractCollection
Возвращает массив, содержащий все элементы этой коллекции; тип возвращаемого массива во время выполнения совпадает с типом указанного массива. Если коллекция помещается в указанный массив, она возвращается в нем. В противном случае выделяется новый массив с типом указанного массива во время выполнения и размером, равным размеру этой коллекции.

Если коллекция помещается в указанный массив с запасом (то есть в массиве больше элементов, чем в коллекции), элемент массива, непосредственно следующий за концом коллекции, устанавливается в null. (Это позволяет определить длину коллекции только в том случае, если вызывающий код знает, что коллекция не содержит элементов null.)

Если коллекция гарантирует определенный порядок возврата элементов итератором, этот метод должен возвращать элементы в том же порядке.

Определено в:
toArray в интерфейсе Collection<E>
Определено в:
toArray в интерфейсе Set<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Параметры типа:
T - тип компонентов массива, в котором будет храниться коллекция
Параметры:
a - массив, в который следует поместить элементы этой коллекции, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа во время выполнения.
Возвращает:
массив, содержащий все элементы этой коллекции

newHashSet

public static <T> HashSet<T> newHashSet(int numElements)
Создает новое пустое HashSet, подходящее для ожидаемого количества элементов. Возвращаемое множество использует коэффициент загрузки по умолчанию 0.75, а его начальная емкость, как правило, достаточна для добавления ожидаемого количества элементов без изменения размера множества.
Параметры типа:
T - тип элементов, хранящихся в новом множестве
Параметры:
numElements - ожидаемое количество элементов
Возвращает:
созданное множество
Исключения:
IllegalArgumentException - если numElements отрицательно
Начиная с:
19

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/HashSet.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API