Spec-Zone.ru › OpenJDK 21

Класс 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()
Создаёт новое пустое множество; поддерживающий экземпляр 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()
Создаёт отложенную и быстропроверяющую Spliterator по элементам в этом множестве.
Object[] toArray()
Возвращает массив, содержащий все элементы в этой коллекции.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы в этой коллекции; тип возвращаемого массива соответствует указанному массиву.

Методы, объявленные в классе 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

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

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>
Возвращает:
итератор по элементам в этом наборе
См. также:
  • 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

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

© 1993, 2023, 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/21/docs/api/java.base/java/util/HashSet.html

Spec-Zone.ru

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