Язык

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.Util.ISequencedMap
[<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
    interface ISequencedMap
Наследование
Атрибуты
Реализации

Комментарии

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

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

{@code
                void foo(Map<String, Integer> m) {
                    Map<String, Integer> copy = new LinkedHashMap<>(m);
                    ...
                }
            }

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

Специальные #LinkedHashMap(int,float,boolean) constructor возможности предоставляются для создания связанной хэш-карты, порядок обнаружения которой — это порядок последнего доступа к его записям, от последнего доступа к последнему доступу к последнему (access-order). Такой вид карты хорошо подходит для создания кэшей LRU. putВызов метода , , putIfAbsent, getgetOrDefaultcomputecomputeIfAbsentcomputeIfPresentили merge методов приводит к доступу к соответствующей записи (предполагая, что он существует после завершения вызова). Методы replace приводят только к доступу к записи, если значение заменяется. Метод putAll создает один доступ к записи для каждого сопоставления в указанной карте, в том порядке, в соответствии с которыми сопоставления "ключ-значение" предоставляются итератором заданного набора записей карты. Другие методы не создают доступ к записи. Вызов этих методов в обратном представлении создает доступ к записям на задней карте. Обратите внимание, что в обратном представлении доступ к записи перемещает ее сначала в порядке встречи. Методы явного размещения, такие как putFirst или lastEntry, будь то на карте или в его обратном упорядоченном представлении, выполняют операцию размещения и не создают доступ к записи. Операции с keySetvaluesпредставлениями и entrySet представлениями или их последовательность коллег не влияют на порядок встречи резервной карты.

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

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

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

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

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

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

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

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

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

Разбиения, возвращаемые методом разбиения коллекций, возвращаемых всеми методами представления коллекции этого класса, являются <em>late-binding</em>, <em>fail-fast</em> и дополнительно отчет Spliterator#ORDERED. <Em Примечание>/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.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

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

Имя. Описание
LinkedHashMap()

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

LinkedHashMap(IDictionary)

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

LinkedHashMap(Int32, Single, Boolean)

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

LinkedHashMap(Int32, Single)

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

LinkedHashMap(Int32)

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

LinkedHashMap(IntPtr, JniHandleOwnership)

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

Свойства

Имя. Описание
Class

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

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

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

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

Добавление

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

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

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

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

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

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

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от 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)
Construct(JniObjectReference, JniObjectReferenceOptions)

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

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

Добавление

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

Добавление

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

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

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

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

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

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

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

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

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

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

(Унаследовано от JavaObject)
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)
NewLinkedHashMap(Int32)

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

Notify()

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

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

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

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

Добавление

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

Добавление

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

Добавление

PutIfAbsent(Object, Object)

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

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

Добавление

Remove(Object, Object)

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

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

Добавление

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

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

Replace(Object, Object, Object)

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

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

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

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

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

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

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

SequencedEntrySet()

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

SequencedKeySet()

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

SequencedValues()

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

SetHandle(IntPtr, JniHandleOwnership)

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

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

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

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

Добавление

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

Создает управляемый массив из этого Java оболочки массива.

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

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

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

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

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

Добавление

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

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

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

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

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

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

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

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

Имя. Описание
IJavaPeerable.Disposed()

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

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

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

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

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

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

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

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

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

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

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

(Унаследовано от JavaObject)
IJavaPeerable.UnregisterFromRuntime()

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

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

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

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