Spec-Zone.ru › OpenJDK 17

Класс LinkedHashSet<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<E>
java.util.HashSet<E>
java.util.LinkedHashSet<E>
Параметры типа:
E - тип элементов, поддерживаемых этим множеством
Все реализуемые интерфейсы:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable

Реализация интерфейса Set с использованием хеш-таблицы и связанного списка, обеспечивающая предсказуемый порядок итерации. Эта реализация отличается от HashSet тем, что поддерживает двусвязанный список, проходящий через все его элементы. Этот связанный список определяет порядок итерации, который соответствует порядку добавления элементов в множество (порядок вставки). Обратите внимание, что порядок вставки не изменяется, если элемент перевставлен в множество. (Элемент e перевставлен в множество s если s.add(e) вызван, когда s.contains(e) вернул бы true непосредственно перед вызовом.)

Эта реализация избавляет клиентов от непредсказуемого, как правило, хаотичного порядка, предоставляемого классом HashSet, не неся при этом дополнительных затрат, связанных с классом TreeSet. Его можно использовать для создания копии множества с тем же порядком, что и у исходного, независимо от реализации исходного множества:


     void foo(Set<String> s) {
         Set<String> copy = new LinkedHashSet<>(s);
         ...
     }
 
Этот метод особенно полезен, если модуль принимает множество на вход, копирует его, а затем возвращает результаты, порядок которых определяется порядком копии. (Клиенты, как правило, предпочитают получать результаты в том же порядке, в котором они были представлены.)

Этот класс предоставляет все необязательные Set операции и допускает 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
См. также:
  • Object.hashCode()
  • Collection
  • Set
  • HashSet
  • TreeSet
  • Hashtable
  • Сериализованная форма

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

Конструктор Описание
LinkedHashSet()
Создаёт новое пустое связанное хеш-множество с исходной ёмкостью по умолчанию (16) и коэффициентом загрузки (0.75).
LinkedHashSet(int initialCapacity)
Создаёт новое пустое связанное хеш-множество с указанной начальной ёмкостью и коэффициентом загрузки по умолчанию (0.75).
LinkedHashSet(int initialCapacity, float loadFactor)
Создаёт новое пустое связанное хеш-множество с указанной начальной ёмкостью и коэффициентом загрузки.
LinkedHashSet(Collection<? extends E> c)
Создаёт новое связанное хеш-множество с теми же элементами, что и в указанной коллекции.

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

Модификатор и тип Метод Описание
Spliterator<E> spliterator()
Создаёт отложенную и быстропроваливающуюся Spliterator по элементам в этом множестве.

Методы, объявленные в классе java.util.HashSet

add, clear, clone, contains, isEmpty, iterator, remove, size, toArray, toArray

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

add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray

Подробное описание конструкторов

LinkedHashSet

public LinkedHashSet(int initialCapacity, float loadFactor)
Создаёт новый пустой связный хеш-сет с указанной начальной ёмкостью и коэффициентом загрузки.
Параметры:
initialCapacity - начальная ёмкость связного хеш-сета
loadFactor - коэффициент загрузки связного хеш-сета
Исключения:
IllegalArgumentException - если начальная ёмкость меньше нуля или коэффициент загрузки не положительный

LinkedHashSet

public LinkedHashSet(int initialCapacity)
Создаёт новый пустой связный хеш-сет с указанной начальной ёмкостью и значением коэффициента загрузки по умолчанию (0,75).
Параметры:
initialCapacity - начальная ёмкость LinkedHashSet
Исключения:
IllegalArgumentException - если начальная ёмкость меньше нуля

LinkedHashSet

public LinkedHashSet()
Создаёт новый пустой связный хеш-сет с начальной ёмкостью по умолчанию (16) и коэффициентом загрузки по умолчанию (0,75).

LinkedHashSet

public LinkedHashSet(Collection<? extends E> c)
Создаёт новый связный хеш-сет с теми же элементами, что и в указанной коллекции. Связный хеш-сет создаётся с начальной ёмкостью, достаточной для хранения элементов в указанной коллекции, и коэффициентом загрузки по умолчанию (0,75).
Параметры:
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>
Примечание реализации:
Реализация создаёт позднее связывание spliterator из Iterator сета. Spliterator наследует свойства быстродействие при обнаружении ошибок итератора сета. Созданный Spliterator дополнительно сообщает о Spliterator.SUBSIZED.
Возвращает:
Spliterator по элементам в этом сете
С:
1.8

© 1993, 2021, 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/17/docs/api/java.base/java/util/LinkedHashSet.html

Spec-Zone.ru

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