Класс 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()

Создаёт новое пустое множество; базовый экземпляр 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()

Возвращает итератор по элементам в этом множестве.

boolean remove​(Object o)

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

int size()

Возвращает количество элементов в этом множестве (его мощность).

Spliterator<E> spliterator()

Создаёт отложенную привязку и быстродействующий 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

Spec-Zone .ru
спецификации, руководства, описания, API