Spec-Zone .ru
спецификации, руководства, описания, API
|
K
- тип ключей сохраняется этой картойV
- тип отображенных значенийpublic class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
Хэш-таблица и реализация связанного списка интерфейса Map, с предсказуемым итеративным порядком. Эта реализация отличается от HashMap, в котором она поддерживает двунаправленный связанный список, пробегающий все его записи. Этот связанный список определяет итеративное упорядочивание, которое обычно является порядком, в который ключи были вставлены в карту (порядок вставки). Отметьте, что на порядок вставки не влияют, если ключ повторно вставляется в карту. (Ключ k повторно вставляется в карту m, если бы m.put(k, v) вызывается, когда m.containsKey(k) сразу возвратил бы true до вызова.)
Эта реализация спасает свои клиенты от неуказанного, обычно хаотического упорядочивания, обеспеченного HashMap
(и Hashtable
), не подвергаясь увеличенной стоимости, связанной с TreeMap
. Это может использоваться, чтобы произвести копию карты, у которой есть тот же самый порядок как оригинал, независимо от реализации исходной карты:
void foo(Map m) { Map copy = new LinkedHashMap(m); ... }Этот метод особенно полезен, если модуль берет карту на вводе, копии он, и более поздние результаты возвратов, порядок которых определяется той из копии. (Клиенты обычно ценят вещи возврата в том же самом порядке, они были представлены.)
Специальное предложение constructor
обеспечивается, чтобы создать соединенную карту хеша, чей порядок итерации является порядком, в котором его записи были последними, получил доступ, от наименее недавно полученного доступ до последний раз (порядка доступа). Этот вид карты является подходящим к созданию кэшей LRU. Вызов метода put ИЛИ get приводит к доступу к соответствующей записи (предполагающий, что это существует после того, как вызов завершается). Метод putAll генерирует один доступ записи для каждого отображения в указанной карте в порядке, что отображения значения ключа обеспечиваются набором записи указанной карты iterator. Никакие другие методы не генерируют доступы записи. В частности операции на представлениях набора не влияют на порядок итерации отступающей карты.
removeEldestEntry(Map.Entry)
метод может быть переопределен, чтобы наложить политику для того, чтобы удалить устарелые отображения автоматически, когда новые отображения добавляются к карте.
Этот класс обеспечивает все дополнительные операции Map, и разрешает нулевые элементы. Как HashMap, это обеспечивает постоянно-разовую производительность для основных операций (add, contains и remove), предполагая, что хеш-функция рассеивает элементы должным образом среди блоков. Производительность, вероятно, будет только немного ниже того из HashMap, из-за добавленного расхода поддержания связанного списка, с одним исключением: Итерация по представлениям набора LinkedHashMap требует времени, пропорционального размеру карты, независимо от ее емкости. Итерация по HashMap, вероятно, будет более дорогой, требуя времени, пропорционального его емкости.
У соединенной карты хеша есть два параметра, которые влияют на ее производительность: начальная емкость и коэффициент загрузки. Они определяются точно что касается HashMap. Отметьте, однако, что штраф за выбор чрезмерно высокого значения для начальной емкости менее серьезен для этого класса чем для HashMap, поскольку итеративные времена для этого класса незатронуты емкостью.
Отметьте, что эта реализация не синхронизируется. Если многократные потоки получают доступ к соединенной карте хеша одновременно, и по крайней мере один из потоков изменяет карту структурно, это должно синхронизироваться внешне. Это обычно выполняется, синхронизируясь на некотором объекте, который естественно инкапсулирует карту. Если никакой такой объект не существует, карта должна быть "обернута", используя Collections.synchronizedMap
метод. Это лучше всего делается во время создания, чтобы предотвратить случайный несинхронизируемый доступ к карте:
Map m = Collections.synchronizedMap(new LinkedHashMap(...));Структурная модификация является любой работой, которая добавляет или удаляет одно или более отображений или, в случае упорядоченных доступом соединенных карт хеша, влияет на итеративный порядок. В упорядоченных вставкой соединенных картах хеша, просто изменяя значение, связанное с ключом, который уже содержится в карте, не структурная модификация. В упорядоченных доступом соединенных картах хеша, просто запрашивая карту с get структурная модификация.)
iterators, возвращенные методом iterator наборов, возвращенных всеми методами представления набора этого класса, являются сбоем быстро: если карта структурно изменяется когда-либо после того, как iterator создается, всегда кроме через собственный метод remove iterator, iterator бросит a ConcurrentModificationException
. Таким образом, перед лицом параллельной модификации, iterator перестал работать быстро и чисто, вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем.
Отметьте, что поведение сбоя быстро iterator не может быть гарантировано, как, вообще говоря, невозможно сделать любые трудные гарантии в присутствии несинхронизируемой параллельной модификации. Перестаньте работать быстро iterators бросают ConcurrentModificationException на основе максимальных усилий. Поэтому, было бы неправильно записать программу, которая зависела от этого исключения для его правильности: поведение сбоя быстро iterators должно использоваться только, чтобы обнаружить ошибки.
Этот класс является элементом Платформы Наборов Java.
Object.hashCode()
, Collection
, Map
, HashMap
, TreeMap
, Hashtable
, Сериализированная ФормаAbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Конструктор и Описание |
---|
LinkedHashMap()
Создает пустой упорядоченный вставкой экземпляр LinkedHashMap с начальной емкостью по умолчанию (16) и коэффициент загрузки (0.75).
|
LinkedHashMap(int initialCapacity)
Создает пустой упорядоченный вставкой экземпляр LinkedHashMap с указанной начальной емкостью и коэффициентом загрузки по умолчанию (0.75).
|
LinkedHashMap(int initialCapacity, float loadFactor)
Создает пустой упорядоченный вставкой экземпляр LinkedHashMap с указанной начальной емкостью и коэффициентом загрузки.
|
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
Создает пустой экземпляр LinkedHashMap с указанной начальной емкостью, коэффициентом загрузки и режимом упорядочивания.
|
LinkedHashMap(Map<? extends K,? extends V> m)
Создает упорядоченный вставкой экземпляр LinkedHashMap с теми же самыми отображениями как указанная карта.
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
clear()
Удаляет все отображения из этой карты.
|
boolean |
containsValue(Object value)
true возвратов, если эта карта отображает один или более ключей на указанное значение.
|
V |
get(Object key)
Возвращает значение, на которое указанный ключ отображается, или
null если эта карта не содержит отображения для ключа. |
protected boolean |
removeEldestEntry(Map.Entry<K,V> eldest)
true возвратов, если эта карта должна удалить свою старшую запись.
|
clone, containsKey, entrySet, isEmpty, keySet, put, putAll, remove, size, values
equals, hashCode, toString
public LinkedHashMap(int initialCapacity, float loadFactor)
initialCapacity
- начальная емкостьloadFactor
- коэффициент загрузкиIllegalArgumentException
- если начальная емкость отрицательна, или коэффициент загрузки неположителенpublic LinkedHashMap(int initialCapacity)
initialCapacity
- начальная емкостьIllegalArgumentException
- если начальная емкость отрицательнаpublic LinkedHashMap()
public LinkedHashMap(Map<? extends K,? extends V> m)
m
- карта, отображения которой должны быть помещены в эту картуNullPointerException
- если указанная карта является нулемpublic LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
initialCapacity
- начальная емкостьloadFactor
- коэффициент загрузкиaccessOrder
- режим упорядочивания - true для порядка доступа, false для порядка вставкиIllegalArgumentException
- если начальная емкость отрицательна, или коэффициент загрузки неположителенpublic boolean containsValue(Object value)
containsValue
в интерфейсе Map<K,V>
containsValue
в классе HashMap<K,V>
value
- оцените, чье присутствие в этой карте должно быть протестированоpublic V get(Object key)
null
если эта карта не содержит отображения для ключа. Более формально, если эта карта содержит отображение от ключа k
к значению v
так, что (key==null ? k==null : key.equals(k))
, тогда этот метод возвраты v
; иначе это возвращается null
. (Может быть самое большее одно такое отображение.)
Возвращаемое значение null
не обязательно указывает, что карта не содержит отображения для ключа; также возможно, что карта явно отображает ключ на null
. containsKey
работа может использоваться, чтобы отличить эти два случая.
get
в интерфейсе Map<K,V>
get
в классе HashMap<K,V>
key
- ключ, присваиваемое значение которого должно быть возвращеноnull
если эта карта не содержит отображения для ключаHashMap.put(Object, Object)
public void clear()
protected boolean removeEldestEntry(Map.Entry<K,V> eldest)
Демонстрационное использование: это переопределение позволит карте расти к 100 записям и затем удалять старшую запись каждый раз, когда новая запись добавляется, поддерживая устойчивое состояние 100 записей.
private static final int MAX_ENTRIES = 100; protected boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_ENTRIES; }
Этот метод обычно не изменяет карту всегда, вместо этого позволяя карту измениться как направлено ее возвращаемым значением. Разрешается для этого метода изменить карту непосредственно, но если это делает так, это должно возвратить false (указание, что карта не должна делать попытку дальнейшей модификации). Эффекты возврата true после изменения карты изнутри этого метода являются неуказанными.
Эта реализация просто возвращает false (так, чтобы эта карта действия как карта нормалей - старший элемент никогда не была удалена).
eldest
- Наименее недавно вставленная запись в карте, или если это - упорядоченная доступом карта, наименее запись, к которой недавно получают доступ. Это - запись, которая будет удалена это, этот метод возвращает true. Если карта была пуста до put или вызова putAll, приводящего к этому вызову, это будет записью, которая была только вставлена; другими словами, если карта содержит единственную запись, старшая запись является также новейшей.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.