Spec-Zone.ru › OpenJDK 8

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

Создаёт новое пустое множество; базовый экземпляр HashMap имеет значение по умолчанию для начальной ёмкости (16) и коэффициента заполнения (0.75).

HashSet(Collection<? extends E> c)

Создаёт новое множество, содержащее элементы в указанной коллекции.

HashSet(int initialCapacity)

Создаёт новое пустое множество; базовый экземпляр HashMap имеет указанную начальную ёмкость и коэффициент заполнения по умолчанию (0.75).

HashSet(int initialCapacity, float loadFactor)

Создаёт новое пустое множество; базовый экземпляр HashMap имеет указанную начальную ёмкость и указанный коэффициент заполнения.

Методы

Модификатор и тип Метод и описание
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.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.

Spec-Zone.ru

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