Spec-Zone .ru
спецификации, руководства, описания, API
|
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 s) { Set copy = new LinkedHashSet(s); ... }Этот метод особенно полезен, если модуль берет набор на вводе, копии он, и более поздние результаты возвратов, порядок которых определяется той из копии. (Клиенты обычно ценят вещи возврата в том же самом порядке, они были представлены.)
Этот класс обеспечивает все дополнительные операции Set, и разрешает нулевые элементы. Как HashSet, это обеспечивает постоянно-разовую производительность для основных операций (add, contains и remove), предполагая, что хеш-функция рассеивает элементы должным образом среди блоков. Производительность, вероятно, будет только немного ниже того из HashSet, из-за добавленного расхода поддержания связанного списка, с одним исключением: Итерация по LinkedHashSet требует времени, пропорционального размеру набора, независимо от его емкости. Итерация по HashSet, вероятно, будет более дорогой, требуя времени, пропорционального его емкости.
У соединенного набора хеша есть два параметра, которые влияют на его производительность: начальная емкость и коэффициент загрузки. Они определяются точно что касается HashSet. Отметьте, однако, что штраф за выбор чрезмерно высокого значения для начальной емкости менее серьезен для этого класса чем для HashSet, поскольку итеративные времена для этого класса незатронуты емкостью.
Отметьте, что эта реализация не синхронизируется. Если многократные потоки получают доступ к соединенному набору хеша одновременно, и по крайней мере один из потоков изменяет набор, он должен синхронизироваться внешне. Это обычно выполняется, синхронизируясь на некотором объекте, который естественно инкапсулирует набор. Если никакой такой объект не существует, набор должен быть "обернут", используя Collections.synchronizedSet
метод. Это лучше всего делается во время создания, чтобы предотвратить случайный несинхронизируемый доступ к набору:
Set s = Collections.synchronizedSet(new LinkedHashSet(...));
iterators, возвращенные методом iterator этого класса, являются сбоем быстро: если набор изменяется когда-либо после того, как iterator создается, всегда кроме через собственный метод remove iterator, iterator бросит a ConcurrentModificationException
. Таким образом, перед лицом параллельной модификации, iterator перестал работать быстро и чисто, вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем.
Отметьте, что поведение сбоя быстро iterator не может быть гарантировано, как, вообще говоря, невозможно сделать любые трудные гарантии в присутствии несинхронизируемой параллельной модификации. Перестаньте работать быстро iterators бросают ConcurrentModificationException на основе максимальных усилий. Поэтому, было бы неправильно записать программу, которая зависела от этого исключения для его правильности: поведение сбоя быстро iterators должно использоваться только, чтобы обнаружить ошибки.
Этот класс является элементом Платформы Наборов Java.
Object.hashCode()
, Collection
, Set
, HashSet
, TreeSet
, Hashtable
, Сериализированная ФормаКонструктор и Описание |
---|
LinkedHashSet()
Создает новый, пустой соединенный набор хеша с начальной емкостью по умолчанию (16) и коэффициент загрузки (0.75).
|
LinkedHashSet(Collection<? extends E> c)
Создает новый соединенный набор хеша с теми же самыми элементами как указанный набор.
|
LinkedHashSet(int initialCapacity)
Создает новый, пустой соединенный набор хеша с указанной начальной емкостью и коэффициентом загрузки по умолчанию (0.75).
|
LinkedHashSet(int initialCapacity, float loadFactor)
Создает новый, пустой соединенный набор хеша с указанной начальной емкостью и коэффициентом загрузки.
|
add, clear, clone, contains, isEmpty, iterator, remove, size
equals, hashCode, removeAll
addAll, containsAll, retainAll, toArray, toArray, toString
public LinkedHashSet(int initialCapacity, float loadFactor)
initialCapacity
- начальная емкость соединенного хеша устанавливаетсяloadFactor
- коэффициент загрузки соединенного хеша устанавливаетсяIllegalArgumentException
- если начальная емкость является меньше чем нуль, или если коэффициент загрузки неположителенpublic LinkedHashSet(int initialCapacity)
initialCapacity
- начальная емкость LinkedHashSetIllegalArgumentException
- если начальная емкость является меньше чем нульpublic LinkedHashSet()
public LinkedHashSet(Collection<? extends E> c)
c
- набор, элементы которого должны быть помещены в этот наборNullPointerException
- если указанный набор является нулем
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.