Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
HashSet() |
Создаёт новое пустое множество; базовый экземпляр HashMap имеет начальную ёмкость по умолчанию (16) и коэффициент загрузки (0.75). |
HashSet |
Создаёт новое пустое множество; базовый экземпляр HashMap имеет указанную начальную ёмкость и коэффициент загрузки по умолчанию (0.75). |
HashSet |
Создаёт новое пустое множество; базовый экземпляр HashMap имеет указанную начальную ёмкость и указанный коэффициент загрузки. |
HashSet |
Создаёт новое множество, содержащее элементы указанной коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Добавляет указанный элемент в это множество, если он ещё не присутствует. |
void |
clear() |
Удаляет все элементы из этого множества. |
Object |
clone() |
Возвращает поверхностную копию этого экземпляра HashSet: сами элементы не клонируются. |
boolean |
contains |
Возвращает true, если это множество содержит указанный элемент. |
boolean |
isEmpty() |
Возвращает true, если это множество не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам этого множества. |
static <T> HashSet |
newHashSet |
Создаёт новое пустое HashSet, подходящее для ожидаемого количества элементов. |
boolean |
remove |
Удаляет указанный элемент из этого множества, если он присутствует. |
int |
size() |
Возвращает количество элементов в этом множестве (его мощность). |
Spliterator |
spliterator() |
Создаёт привязываемый при первом использовании и fail-fast Spliterator для элементов этого множества. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой коллекции. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; тип возвращённого массива во время выполнения совпадает с типом указанного массива. |
Методы, объявленные в классе AbstractSet
equals, hashCode, removeAll | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает указанный объект с этим множеством на равенство. |
int |
hashCode() |
Возвращает значение хеш-кода для этого множества. |
boolean |
removeAll |
Удаляет из этого множества все элементы, содержащиеся в указанной коллекции (необязательная операция). |
Методы, объявленные в классе AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет все элементы указанной коллекции в эту коллекцию (необязательная операция). |
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы указанной коллекции. |
boolean |
retainAll |
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой коллекции. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; тип возвращённого массива во время выполнения совпадает с типом указанного массива. |
String |
toString() |
Возвращает строковое представление этой коллекции. |
Методы, объявленные в классе Object
finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс этого Object во время выполнения. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения указанного промежутка времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения указанного промежутка времени. |
Методы, объявленные в интерфейсе Collection
parallelStream, removeIf, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция. |
default boolean |
removeIf |
Удаляет из этой коллекции все элементы, удовлетворяющие заданному предикату (необязательная операция). |
default Stream |
stream() |
Возвращает последовательный Stream, источником которого является эта коллекция. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
Методы, объявленные в интерфейсе Iterable
forEach | Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. |
Методы, объявленные в интерфейсе Set
addAll, containsAll, retainAll | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет в это множество все элементы указанной коллекции, которых в нём ещё нет (необязательная операция). |
boolean |
containsAll |
Возвращает true, если это множество содержит все элементы указанной коллекции. |
boolean |
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()
size
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
spliterator
public Spliterator<E> spliterator()
Spliterator для элементов этого множества. Spliterator сообщает о характеристиках Spliterator.SIZED и Spliterator.DISTINCT. В переопределяющих реализациях следует документировать наличие дополнительных характеристик.
- Определено в:
-
spliteratorв интерфейсеCollection<E> - Определено в:
-
spliteratorв интерфейсеIterable<E> - Определено в:
-
spliteratorв интерфейсеSet<E> - Возвращает:
Spliteratorпо элементам этого множества- Начиная с версии:
- 1.8
toArray
public Object[] toArray()
AbstractCollectionObject. Возвращённый массив является «безопасным»: эта коллекция не хранит на него ссылок. (Иными словами, метод должен выделить новый массив, даже если эта коллекция основана на массиве.) Таким образом, вызывающий код может свободно изменять возвращённый массив.
- Определено в:
-
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)
- Параметры типа:
T- тип элементов, хранящихся в новом множестве- Параметры:
-
numElements- ожидаемое количество элементов - Возвращает:
- созданное множество
- Исключения:
-
IllegalArgumentException- если numElements отрицательно - Начиная с версии:
- 19
© 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.