Класс 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 этого класса, являются быстродействующими: если множество изменяется в любое время после создания итератора, любым способом, кроме как через собственный метод итератора remove, итератор выбрасывает исключение ConcurrentModificationException. Таким образом, в случае одновременного изменения итератор быстро и четко терпит неудачу, а не рискует произвольным, непредсказуемым поведением в неопределенный момент времени в будущем.
Обратите внимание, что поведение быстродействующего итератора не может быть гарантировано, так как, как правило, невозможно дать какие-либо гарантии в случае несинхронизированного одновременного изменения. Быстродействующие итераторы выбрасывают ConcurrentModificationException на основе наилучших усилий. Поэтому было бы неправильно писать программу, которая полагалась бы на это исключение для своей корректности: поведение быстродействующих итераторов следует использовать только для обнаружения ошибок.
Этот класс является членом Java Collections Framework.
- С тех пор:
- 1.2
- См. также:
-
Collection,Set,TreeSet,HashMap, Форматирование сериализации
Конструкторы
| Конструктор | Описание |
|---|---|
HashSet() | Создаёт новое пустое множество; базовый экземпляр |
HashSet(int initialCapacity) | Создаёт новое пустое множество; базовый экземпляр |
HashSet(int initialCapacity,
float loadFactor) | Создаёт новое пустое множество; базовый экземпляр |
HashSet(Collection<? extends E> c) | Создаёт новое множество, содержащее элементы в указанном наборе. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | add(E e) | Добавляет указанный элемент в это множество, если он ещё не присутствует. |
void | clear() | Удаляет все элементы из этого множества. |
Object | clone() | Возвращает неглубокую копию этого экземпляра |
boolean | contains(Object o) | Возвращает |
boolean | isEmpty() | Возвращает |
Iterator<E> | iterator() | Возвращает итератор по элементам в этом множестве. |
boolean | remove(Object o) | Удаляет указанный элемент из этого множества, если он присутствует. |
int | size() | Возвращает количество элементов в этом множестве (его мощность). |
Spliterator<E> | spliterator() | Создаёт отложенную привязку и быстродействующий |
Методы, объявленные в классе java.util.AbstractSet
equals, hashCode, removeAll Методы, объявленные в классе java.util.AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString Методы, объявленные в классе java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait Методы, объявленные в интерфейсе java.util.Collection
parallelStream, removeIf, stream, toArray Методы, объявленные в интерфейсе java.lang.Iterable
forEach Методы, объявленные в интерфейсе java.util.Set
addAll, containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray Конструкторы
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 структура имеет указанную начальную ёмкость и указанный коэффициент заполнения.
- Параметры:
-
initialCapacity- начальная ёмкость хэш-мапы -
loadFactor- коэффициент заполнения хэш-мапы - Исключения:
-
IllegalArgumentException- если начальная ёмкость меньше нуля или если коэффициент заполнения не положителен
HashSet
public HashSet(int initialCapacity)
Создаёт новый пустой набор; базовая HashMap структура имеет указанную начальную ёмкость и коэффициент заполнения по умолчанию (0,75).
- Параметры:
-
initialCapacity- начальная ёмкость хэш-таблицы - Исключения:
-
IllegalArgumentException- если начальная ёмкость меньше нуля
Методы
iterator
public Iterator<E> iterator()
Возвращает итератор по элементам в этом наборе. Элементы возвращаются в произвольном порядке.
- Унаследовано от:
-
iteratorв интерфейсеCollection<E> - Унаследовано от:
-
iteratorв интерфейсеIterable<E> - Унаследовано от:
-
iteratorв интерфейсеSet<E> - Унаследовано от:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам в этом наборе
- См. также:
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()
Создаёт отложенную и быстропроверяющую Spliterator по элементам в этом наборе.
Spliterator сообщает о Spliterator.SIZED и Spliterator.DISTINCT. Переопределяющие реализации должны документировать отчёт о дополнительных значениях характеристик.
- Унаследовано от:
-
spliteratorв интерфейсеCollection<E> - Унаследовано от:
-
spliteratorв интерфейсеIterable<E> - Унаследовано от:
-
spliteratorв интерфейсеSet<E> - Возвращает:
Spliteratorпо элементам в этом наборе- С тех пор:
- 1.8
© 1993, 2020, 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/11/docs/api/java.base/java/util/HashSet.html