Класс 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.
- C момента:
- 1.2
- См. также:
-
Collection,Set,TreeSet,HashMap, Формат сериализации
Конструкторы
| Конструктор и описание |
|---|
HashSet() Создаёт новое пустое множество; базовый экземпляр |
HashSet(Collection<? extends E> c) Создаёт новое множество, содержащее элементы в указанной коллекции. |
HashSet(int initialCapacity) Создаёт новое пустое множество; базовый экземпляр |
HashSet(int initialCapacity,
float loadFactor) Создаёт новое пустое множество; базовый экземпляр |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
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.Set
addAll, containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray Методы, унаследованные от интерфейса java.util.Collection
parallelStream, removeIf, stream Методы, унаследованные от интерфейса java.lang.Iterable
forEach Конструкторы
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в интерфейсеIterable<E> - Задано:
-
iteratorв интерфейсеCollection<E> - Задано:
-
iteratorв интерфейсеSet<E> - Задано:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам в этом наборе
- См. также:
ConcurrentModificationException
size
public int size()
Возвращает количество элементов в этом наборе (его мощность).
- Задано:
-
sizeв интерфейсеCollection<E> - Задано:
-
sizeв интерфейсеSet<E> - Задано:
-
sizeв классеAbstractCollection<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, такой что (o==null ? e==null : o.equals(e)).
- Задано:
-
containsв интерфейсеCollection<E> - Задано:
-
containsв интерфейсеSet<E> - Переопределяет:
-
containsв классеAbstractCollection<E> - Параметры:
-
o- элемент, присутствие которого в этом наборе необходимо проверить - Возвращает:
-
true, если этот набор содержит указанный элемент
add
public boolean add(E e)
Добавляет указанный элемент в этот набор, если он ещё не присутствует. Более формально, добавляет указанный элемент e в этот набор, если этот набор не содержит элемент e2, такой что (e==null ? e2==null : e.equals(e2)). Если этот набор уже содержит элемент, вызов оставляет набор неизменным и возвращает false.
- Задано:
-
addв интерфейсеCollection<E> - Задано:
-
addв интерфейсеSet<E> - Переопределяет:
-
addв классеAbstractCollection<E> - Параметры:
-
e- элемент, который нужно добавить в этот набор - Возвращает:
-
true, если этот набор ещё не содержал указанный элемент
remove
public boolean remove(Object o)
Удаляет указанный элемент из этого набора, если он присутствует. Более формально, удаляет элемент e, такой что (o==null ? e==null : o.equals(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в интерфейсеIterable<E> - Задано:
-
spliteratorв интерфейсеCollection<E> - Задано:
-
spliteratorв интерфейсеSet<E> - Возвращает:
Spliteratorпо элементам в этом наборе- C момента:
- 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.