LinkedHashMap Класс

Определение

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type LinkedHashMap = class
    inherit HashMap
    interface IMap
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Наследование
Атрибуты
Реализации

Комментарии

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации. Эта реализация отличается от HashMap тем, что она поддерживает список с двойной связью, проходящий через все его записи. Этот связанный список определяет порядок итерации, который обычно представляет собой порядок вставки ключей в карту (порядок вставки). Обратите внимание, что порядок вставки не влияет при повторной вставке ключа в карту. (Ключ k повторно вставляется в карту m , если m.put(k, v) вызывается , когда m.containsKey(k) возвращается true непосредственно перед вызовом.)

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

void foo(Map m) {
                    Map copy = new LinkedHashMap(m);
                    ...
                }

Этот метод особенно полезен, если модуль принимает карту на входные данные, копирует ее, а затем возвращает результаты, порядок которых определяется порядком копии. (Клиенты, как правило, ценят, что вещи возвращаются в том же порядке, в который они были представлены.)

#LinkedHashMap(int,float,boolean) constructor Для создания связанной хэш-карты, порядок итерации которой — это порядок, в котором последний доступ к его записям был получен, от последнего доступа к последним (access-order). Этот вид карты хорошо подходит для создания кэшей LRU. Вызов putметодов , putIfAbsent, get, getOrDefault, computecomputeIfAbsent, computeIfPresentили merge приводит к доступу к соответствующей записи (при условии, что она существует после завершения вызова). Методы replace приводят к доступу к записи только в том случае, если значение заменено. Метод putAll создает один доступ к записи для каждого сопоставления в указанной карте в том порядке, в который сопоставления "ключ-значение" предоставляются итератором набора записей указанной карты. Никакие другие методы не создают доступ к записи. В частности, операции с представлениями коллекций не влияют на порядок итерации резервной карты.

Метод #removeEldestEntry(Map.Entry) может быть переопределен, чтобы применить политику автоматического удаления устаревших сопоставлений при добавлении новых сопоставлений на карту.

Этот класс предоставляет все необязательные Map операции и разрешает элементы NULL. Как и HashMap, он обеспечивает постоянную производительность для базовых операций (addи remove), при условии, contains что хэш-функция правильно распределяет элементы между контейнерами. Производительность, скорее всего, немного ниже , из-за HashMapдополнительных расходов на обслуживание связанного списка, за одним исключением: итерация представлений LinkedHashMap коллекции требует времени, пропорционального размеру карты, независимо от ее емкости. Итерация по объекту , скорее HashMap всего, будет более затратной и потребует времени, пропорционального его емкости.

Связанная хэш-карта имеет два параметра, которые влияют на ее производительность: начальную емкость и коэффициент загрузки. Они определяются точно как для HashMap. Однако обратите внимание, что штраф за выбор чрезмерно высокого значения для начальной емкости для этого класса менее суров, чем для HashMap, так как время итерации для этого класса не влияет на емкость.

<strong>Обратите внимание, что эта реализация не синхронизирована.</strong> Если несколько потоков обращаются к связанной хэш-карте одновременно и хотя бы один из потоков изменяет карту структурно, она <>должна<> быть синхронизирована извне. Обычно это достигается путем синхронизации с каким-то объектом, который естественным образом инкапсулирует карту.

Если такого объекта нет, карта должна быть "упакована" с помощью Collections#synchronizedMap Collections.synchronizedMap метода . Это лучше всего делать во время создания, чтобы предотвратить случайный несинхронизированный доступ к карте:

Map m = Collections.synchronizedMap(new LinkedHashMap(...));

Структурное изменение — это любая операция, которая добавляет или удаляет одно или несколько сопоставлений или, в случае упорядоченных связанных хэш-карт, влияет на порядок итерации. В упорядоченных по вставке связанных хэш-картах простое изменение значения, связанного с ключом, который уже содержится на карте, не является структурным изменением. <strong>В связанных хэш-картах с упорядоченным доступом запрос к карте get является структурным изменением. </strong>)

Итераторы, возвращаемые методом iterator коллекций, возвращаемых всеми методами представления коллекции этого класса, являются <em>fail-fast</em>: если сопоставление будет структурно изменено в любое время после создания итератора, любым способом, кроме как с помощью собственного remove метода итератора, итератор вызовет ConcurrentModificationExceptionисключение . Таким образом, при одновременном изменении итератор завершает работу быстро и чисто, вместо того, чтобы рисковать произвольным, недетерминированным поведением в неопределенное время в будущем.

Обратите внимание, что быстрое поведение итератора не может быть гарантировано, так как в целом невозможно сделать какие-либо жесткие гарантии при наличии несинхронизированного параллельного изменения. Быстрые итераторы создаются ConcurrentModificationException на основе наилучших усилий. Поэтому было бы неправильно писать программу, которая зависит от этого исключения из-за его правильности: быстрое поведение итераторов должно использоваться только для обнаружения ошибок.

Разделители, возвращаемые методом разбиения коллекций, возвращаемых всеми методами представления коллекции этого класса, являются <em>late-binding</em>, <em>fail-fast</em> и дополнительно сообщают Spliterator#ORDERED. <Em>Note</em>. Реализация этих разделителей в Android Nougat (уровни API 24 и 25) использует неправильный порядок (несовместимый с итераторами, которые используют правильный порядок), несмотря на отчеты Spliterator#ORDERED. Чтобы получить правильно упорядоченный разделитель на уровне API 24 и 25, можно использовать следующие фрагменты кода: <ul<>li>Для представления c = lhm.keySet()c = lhm.entrySet() коллекции или c = lhm.values()используйте java.util.Spliterators.spliterator(c, c.spliterator().characteristics()) вместо c.spliterator(). <Li>Вместо c.stream() или c.parallelStream()используйте для java.util.stream.StreamSupport.stream(spliterator, false) создания (непараллель) java.util.stream.Stream из такого Spliterator. </ul> Обратите внимание, что эти обходные пути предлагаются только в том случае, если lhm является LinkedHashMap.

Этот класс является членом Платформы коллекций Java.

Добавлено в версии 1.4.

Документация по Java для java.util.LinkedHashMap.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Конструкторы

LinkedHashMap()

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

LinkedHashMap(IDictionary)

Создает экземпляр, упорядоченный LinkedHashMap по вставке, с теми же сопоставлениями, что и указанная карта.

LinkedHashMap(Int32)

Создает пустой экземпляр, упорядоченный LinkedHashMap по вставке, с указанной начальной емкостью и коэффициентом нагрузки по умолчанию (0.

LinkedHashMap(Int32, Single)

Создает пустой экземпляр, упорядоченный LinkedHashMap по вставке, с указанной начальной емкостью и коэффициентом нагрузки.

LinkedHashMap(Int32, Single, Boolean)

Создает пустой LinkedHashMap экземпляр с указанной начальной емкостью, коэффициентом нагрузки и режимом упорядочения.

LinkedHashMap(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
IsEmpty

Добавление

(Унаследовано от AbstractMap)
JniIdentityHashCode

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
JniPeerMembers

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

PeerReference

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Clear()

Добавление

(Унаследовано от AbstractMap)
Clone()

Возвращает неглубокую копию этого HashMap экземпляра: сами ключи и значения не клонируются.

(Унаследовано от HashMap)
Compute(Object, IBiFunction)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
ComputeIfAbsent(Object, IFunction)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
ComputeIfPresent(Object, IBiFunction)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
ContainsKey(Object)

Добавление

(Унаследовано от AbstractMap)
ContainsValue(Object)

Добавление

(Унаследовано от AbstractMap)
Dispose()

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
Dispose(Boolean)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
EntrySet()

Set Возвращает представление сопоставлений, содержащихся в этой карте.

(Унаследовано от HashMap)
Equals(Object)

Указывает, равен ли какой-то другой объект этому объекту.

(Унаследовано от Object)
ForEach(IBiConsumer)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
Get(Object)

Добавление

(Унаследовано от AbstractMap)
GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
GetOrDefault(Object, Object)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
JavaFinalize()

Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект .

(Унаследовано от Object)
KeySet()

Добавление

(Унаследовано от AbstractMap)
Merge(Object, Object, IBiFunction)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
Notify()

Пробуждение одного потока, ожидающего на мониторе этого объекта.

(Унаследовано от Object)
NotifyAll()

Активирует все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
Put(Object, Object)

Добавление

(Унаследовано от AbstractMap)
PutAll(IDictionary)

Добавление

(Унаследовано от AbstractMap)
PutIfAbsent(Object, Object)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
Remove(Object)

Добавление

(Унаследовано от AbstractMap)
Remove(Object, Object)

Удаляет сопоставление указанного ключа с этой карты, если оно имеется.

(Унаследовано от HashMap)
RemoveEldestEntry(IMapEntry)

Возвращает значение true , если эта карта должна удалить старую запись.

Replace(Object, Object)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
Replace(Object, Object, Object)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
ReplaceAll(IBiFunction)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от HashMap)
SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
Size()

Добавление

(Унаследовано от AbstractMap)
ToArray<T>()

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
Values()

Добавление

(Унаследовано от AbstractMap)
Wait()

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>.

(Унаследовано от Object)
Wait(Int64)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

IJavaPeerable.Disposed()

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
IJavaPeerable.Finalized()

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенное средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

GetJniTypeName(IJavaPeerable)

Реализация хэш-таблицы и связанного Map списка интерфейса с прогнозируемым порядком итерации.

Применяется к