Класс LinkedHashSet<E>
- Параметры типа:
E- тип элементов, хранящихся в этом множестве
- Все реализуемые интерфейсы:
Serializable, Cloneable, Iterable<E>, Collection<E>, SequencedCollection<E>, SequencedSet<E>, Set<E>
public class LinkedHashSet<E> extends HashSet<E> implements SequencedSet<E>, Cloneable, Serializable
Реализация интерфейса Set на основе хеш-таблицы и связного списка с определённым порядком обхода. Эта реализация отличается от HashSet тем, что поддерживает двусвязный список, проходящий через все элементы. Этот связный список определяет порядок обхода (порядок итерации), то есть порядок, в котором элементы были добавлены в множество (порядок вставки). Элемент, добавленный раньше всех (самый старый), находится первым, а добавленный позже всех (самый новый) — последним. Обратите внимание, что порядок обхода не меняется, если элемент повторно добавляется в множество с помощью метода add. (Элемент e повторно добавляется в множество s, если s.add(e) вызывается в момент, когда s.contains(e) непосредственно перед вызовом возвращает true.) Представление этого множества с обратным порядком имеет противоположный порядок: первым в нём будет самый новый элемент, а последним — самый старый. Порядок обхода элементов, уже находящихся в множестве, можно изменить с помощью методов addFirst и addLast.
Эта реализация избавляет клиентский код от неопределённого, обычно хаотичного порядка, предоставляемого HashSet, не неся при этом повышенных издержек, связанных с TreeSet. Её можно использовать для создания копии множества с тем же порядком элементов, что и в исходном множестве, независимо от реализации исходного множества:
void foo(Set<String> s) {
Set<String> copy = new LinkedHashSet<>(s);
...
}
Этот способ особенно полезен, если модуль получает множество на входе, копирует его, а затем возвращает результаты, порядок которых определяется порядком элементов в копии. (Клиентам обычно нравится, когда элементы возвращаются в том же порядке, в котором они были переданы.) Этот класс предоставляет все необязательные операции интерфейсов Set и SequencedSet и допускает наличие элементов null. Как и HashSet, он обеспечивает постоянное время выполнения основных операций (add, contains и remove), если хеш-функция надлежащим образом распределяет элементы по корзинам. Производительность, вероятно, будет лишь немного ниже, чем у HashSet, из-за дополнительных затрат на поддержку связного списка; есть одно исключение: итерация по LinkedHashSet требует времени, пропорционального размеру множества, независимо от его ёмкости. Итерация по HashSet, вероятно, будет дороже и потребует времени, пропорционального его ёмкости.
Производительность связного хеш-множества зависит от двух параметров: начальной ёмкости и коэффициента загрузки. Они определены так же, как для HashSet. Однако обратите внимание, что выбор чрезмерно большого значения начальной ёмкости менее негативно сказывается на этом классе, чем на HashSet, поскольку ёмкость не влияет на время итерации для этого класса.
Обратите внимание, что эта реализация не синхронизирована. Если несколько потоков одновременно обращаются к связному хеш-множеству и хотя бы один из них изменяет множество, доступ необходимо синхронизировать извне. Обычно для этого синхронизацию выполняют по объекту, который естественным образом инкапсулирует множество. Если такого объекта нет, множество следует «обернуть» с помощью метода Collections.synchronizedSet. Лучше всего сделать это при создании множества, чтобы предотвратить случайный несинхронизированный доступ к нему:
Set s = Collections.synchronizedSet(new LinkedHashSet(...));
Итераторы, возвращаемые методом iterator этого класса, являются быстроотказывающими: если после создания итератора множество каким-либо образом изменяется, кроме как с помощью собственного метода remove итератора, итератор выбрасывает исключение ConcurrentModificationException. Таким образом, при параллельном изменении итератор быстро и корректно завершает работу, вместо того чтобы допускать произвольное недетерминированное поведение в неопределённый момент в будущем.
Обратите внимание, что гарантировать быстроотказывающее поведение итератора нельзя, поскольку, вообще говоря, невозможно дать какие-либо строгие гарантии при несинхронизированном параллельном изменении. Быстроотказывающие итераторы выбрасывают ConcurrentModificationException по возможности. Поэтому было бы неправильно писать программу, корректность которой зависит от этого исключения: быстроотказывающее поведение итераторов следует использовать только для обнаружения ошибок.
Этот класс входит в состав Java Collections Framework.
- С версии:
- 1.4
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
LinkedHashSet() |
Создаёт новое пустое связное хеш-множество с начальной ёмкостью по умолчанию (16) и коэффициентом загрузки (0,75). |
LinkedHashSet |
Создаёт новое пустое связное хеш-множество с указанной начальной ёмкостью и коэффициентом загрузки по умолчанию (0,75). |
LinkedHashSet |
Создаёт новое пустое связное хеш-множество с указанными начальной ёмкостью и коэффициентом загрузки. |
LinkedHashSet |
Создаёт новое связное хеш-множество с теми же элементами, что и указанная коллекция. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addFirst |
Добавляет элемент в начало этой коллекции (необязательная операция). |
void |
addLast |
Добавляет элемент в конец этой коллекции (необязательная операция). |
E |
getFirst() |
Возвращает первый элемент этой коллекции. |
E |
getLast() |
Возвращает последний элемент этой коллекции. |
static <T> LinkedHashSet |
newLinkedHashSet |
Создаёт новое пустое LinkedHashSet, подходящее для ожидаемого количества элементов. |
E |
removeFirst() |
Удаляет и возвращает первый элемент этой коллекции (необязательная операция). |
E |
removeLast() |
Удаляет и возвращает последний элемент этой коллекции (необязательная операция). |
SequencedSet |
reversed() |
Возвращает представление этой коллекции с обратным порядком. |
Spliterator |
spliterator() |
Создаёт поздно связываемый и быстроотказывающий Spliterator для элементов этого множества. |
Методы, объявленные в классе HashSet
add, clear, clone, contains, isEmpty, iterator, newHashSet, remove, size, toArray, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Добавляет указанный элемент в это множество, если он ещё не присутствует. |
void |
clear() |
Удаляет все элементы из этого множества. |
Object |
clone() |
Возвращает поверхностную копию этого экземпляра HashSet: сами элементы не клонируются. |
boolean |
contains |
Возвращает true, если это множество содержит указанный элемент. |
boolean |
isEmpty() |
Возвращает true, если это множество не содержит элементов. |
Iterator |
iterator() |
Возвращает итератор по элементам этого множества. |
static <T> HashSet |
newHashSet |
Создаёт новый пустой HashSet, подходящий для ожидаемого количества элементов. |
boolean |
remove |
Удаляет указанный элемент из этого множества, если он присутствует. |
int |
size() |
Возвращает количество элементов в этом множестве (его мощность). |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой коллекции. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; тип возвращённого массива во время выполнения совпадает с типом указанного массива. |
Методы, объявленные в классе AbstractSet
equals, hashCode, removeAll | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает указанный объект с этим множеством на равенство. |
int |
hashCode() |
Возвращает значение хеш-кода этого множества. |
boolean |
removeAll |
Удаляет из этого множества все элементы, содержащиеся в указанной коллекции (необязательная операция). |
Методы, объявленные в классе AbstractCollection
addAll, containsAll, retainAll, toArray, toArray, toString | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет все элементы указанной коллекции в эту коллекцию (необязательная операция). |
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы указанной коллекции. |
boolean |
retainAll |
Оставляет в этой коллекции только элементы, содержащиеся в указанной коллекции (необязательная операция). |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой коллекции. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; тип возвращённого массива во время выполнения совпадает с типом указанного массива. |
String |
toString() |
Возвращает строковое представление этой коллекции. |
Методы, объявленные в классе Object
finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс этого Object во время выполнения. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате уведомления или прерывания, либо до истечения определённого промежутка реального времени. |
final void |
wait |
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате уведомления или прерывания, либо до истечения определённого промежутка реального времени. |
Методы, объявленные в интерфейсе Collection
parallelStream, removeIf, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
default Stream |
parallelStream() |
Возвращает, возможно параллельный, Stream с этой коллекцией в качестве источника. |
default boolean |
removeIf |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату (необязательная операция). |
default Stream |
stream() |
Возвращает последовательный Stream с этой коллекцией в качестве источника. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
Методы, объявленные в интерфейсе Iterable
forEach | Модификатор и тип | Метод | Описание |
|---|---|---|
default void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не выбросит исключение. |
Методы, объявленные в интерфейсе Set
addAll, containsAll, retainAll | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет в это множество все элементы указанной коллекции, которых в нём ещё нет (необязательная операция). |
boolean |
containsAll |
Возвращает true, если это множество содержит все элементы указанной коллекции. |
boolean |
retainAll |
Оставляет в этом множестве только элементы, содержащиеся в указанной коллекции (необязательная операция). |
Подробное описание конструкторов
LinkedHashSet
public LinkedHashSet(int initialCapacity, float loadFactor)
- Примечание API:
- Чтобы создать
LinkedHashSetс начальной ёмкостью, рассчитанной на ожидаемое количество элементов, используйтеnewLinkedHashSet. - Параметры:
-
initialCapacity- начальная ёмкость связного хеш-множества -
loadFactor- коэффициент загрузки связного хеш-множества - Выбрасывает:
-
IllegalArgumentException- если начальная ёмкость меньше нуля или коэффициент загрузки не является положительным
LinkedHashSet
public LinkedHashSet(int initialCapacity)
- Примечание API:
- Чтобы создать
LinkedHashSetс начальной ёмкостью, рассчитанной на ожидаемое количество элементов, используйтеnewLinkedHashSet. - Параметры:
-
initialCapacity- начальная ёмкость LinkedHashSet - Выбрасывает:
-
IllegalArgumentException- если начальная ёмкость меньше нуля
LinkedHashSet
public LinkedHashSet()
LinkedHashSet
public LinkedHashSet(Collection<? extends E> c)
- Параметры:
-
c- коллекция, элементы которой будут помещены в это множество - Выбрасывает:
-
NullPointerException- если указанная коллекция равна null
Подробное описание методов
spliterator
public Spliterator<E> spliterator()
Spliterator для элементов этого множества. Spliterator сообщает о характеристиках Spliterator.SIZED, Spliterator.DISTINCT и ORDERED. Реализациям следует документировать наличие дополнительных характеристик.
- Определён в:
-
spliteratorв интерфейсеCollection<E> - Определён в:
-
spliteratorв интерфейсеIterable<E> - Определён в:
-
spliteratorв интерфейсеSet<E> - Переопределяет:
-
spliteratorв классеHashSet<E> - Примечание по реализации:
- Реализация создаёт поздно связываемый сплитератор на основе
Iteratorмножества. Сплитератор наследует свойства итератора множества, обеспечивающие быстрый отказ. СозданныйSpliteratorдополнительно сообщает о характеристикеSpliterator.SUBSIZED. - Возвращает:
Spliteratorдля обхода элементов этого множества- С версии:
- 1.8
newLinkedHashSet
public static <T> LinkedHashSet<T> newLinkedHashSet(int numElements)
- Параметры типа:
T- тип элементов, хранящихся в новом множестве- Параметры:
-
numElements- ожидаемое количество элементов - Возвращает:
- созданное множество
- Выбрасывает:
-
IllegalArgumentException- если numElements меньше нуля - С версии:
- 19
addFirst
public void addFirst(E e)
Если этот элемент уже есть в множестве, при необходимости он перемещается в начало порядка обхода.
- Определён в:
-
addFirstв интерфейсеSequencedCollection<E> - Параметры:
-
e- добавляемый элемент - С версии:
- 21
addLast
public void addLast(E e)
Если этот элемент уже есть в множестве, при необходимости он перемещается в конец порядка обхода.
- Определён в:
-
addLastв интерфейсеSequencedCollection<E> - Параметры:
-
e- добавляемый элемент. - С версии:
- 21
getFirst
public E getFirst()
- Определён в:
-
getFirstв интерфейсеSequencedCollection<E> - Возвращает:
- полученный элемент
- Выбрасывает:
-
NoSuchElementException- если эта коллекция пуста - С версии:
- 21
getLast
public E getLast()
- Определён в:
-
getLastв интерфейсеSequencedCollection<E> - Возвращает:
- полученный элемент
- Выбрасывает:
-
NoSuchElementException- если эта коллекция пуста - С версии:
- 21
removeFirst
public E removeFirst()
- Определён в:
-
removeFirstв интерфейсеSequencedCollection<E> - Возвращает:
- удалённый элемент
- Выбрасывает:
-
NoSuchElementException- если эта коллекция пуста - С версии:
- 21
removeLast
public E removeLast()
- Определён в:
-
removeLastв интерфейсеSequencedCollection<E> - Возвращает:
- удалённый элемент
- Выбрасывает:
-
NoSuchElementException- если эта коллекция пуста - С версии:
- 21
reversed
public SequencedSet<E> reversed()
Изменять представление с обратным порядком разрешено; изменения будут переданы этому множеству. Кроме того, изменения этого множества будут видны в представлении с обратным порядком.
- Определён в:
-
reversedв интерфейсеSequencedCollection<E> - Определён в:
-
reversedв интерфейсеSequencedSet<E> - Возвращает:
- представление этой коллекции с обратным порядком в виде
SequencedSet - С версии:
- 21
© 1993, 2025, 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.