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
непосредственно перед вызовом.)
Эта реализация избавляет своих клиентов от неуказанным, как правило, хаотичным упорядочением, предоставляемым HashMap
(и Hashtable
), без увеличения затрат, связанных с TreeMap
. Его можно использовать для создания копии карты, которая имеет тот же порядок, что и исходная, независимо от реализации исходной карты:
void foo(Map m) {
Map copy = new LinkedHashMap(m);
...
}
Этот метод особенно полезен, если модуль принимает карту на входные данные, копирует ее, а затем возвращает результаты, порядок которых определяется порядком копии. (Клиенты, как правило, ценят, что вещи возвращаются в том же порядке, в который они были представлены.)
#LinkedHashMap(int,float,boolean) constructor
Для создания связанной хэш-карты, порядок итерации которой — это порядок, в котором последний доступ к его записям был получен, от последнего доступа к последним (access-order). Этот вид карты хорошо подходит для создания кэшей LRU. Вызов put
методов , putIfAbsent
, get
, getOrDefault
, compute
computeIfAbsent
, 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(IDictionary) |
Создает экземпляр, упорядоченный |
LinkedHashMap(Int32) |
Создает пустой экземпляр, упорядоченный |
LinkedHashMap(Int32, Single) |
Создает пустой экземпляр, упорядоченный |
LinkedHashMap(Int32, Single, Boolean) |
Создает пустой |
LinkedHashMap(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
IsEmpty |
Добавление (Унаследовано от AbstractMap) |
JniIdentityHashCode |
Реализация хэш-таблицы и связанного |
JniPeerMembers |
Реализация хэш-таблицы и связанного |
PeerReference |
Реализация хэш-таблицы и связанного |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
Clear() |
Добавление (Унаследовано от AbstractMap) |
Clone() |
Возвращает неглубокую копию этого |
Compute(Object, IBiFunction) |
Реализация хэш-таблицы и связанного |
ComputeIfAbsent(Object, IFunction) |
Реализация хэш-таблицы и связанного |
ComputeIfPresent(Object, IBiFunction) |
Реализация хэш-таблицы и связанного |
ContainsKey(Object) |
Добавление (Унаследовано от AbstractMap) |
ContainsValue(Object) |
Добавление (Унаследовано от AbstractMap) |
Dispose() |
Реализация хэш-таблицы и связанного |
Dispose(Boolean) |
Реализация хэш-таблицы и связанного |
EntrySet() |
|
Equals(Object) |
Указывает, равен ли какой-то другой объект этому объекту. (Унаследовано от Object) |
ForEach(IBiConsumer) |
Реализация хэш-таблицы и связанного |
Get(Object) |
Добавление (Унаследовано от AbstractMap) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
GetOrDefault(Object, Object) |
Реализация хэш-таблицы и связанного |
JavaFinalize() |
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект . (Унаследовано от Object) |
KeySet() |
Добавление (Унаследовано от AbstractMap) |
Merge(Object, Object, IBiFunction) |
Реализация хэш-таблицы и связанного |
Notify() |
Пробуждение одного потока, ожидающего на мониторе этого объекта. (Унаследовано от Object) |
NotifyAll() |
Активирует все потоки, ожидающие на мониторе этого объекта. (Унаследовано от Object) |
Put(Object, Object) |
Добавление (Унаследовано от AbstractMap) |
PutAll(IDictionary) |
Добавление (Унаследовано от AbstractMap) |
PutIfAbsent(Object, Object) |
Реализация хэш-таблицы и связанного |
Remove(Object) |
Добавление (Унаследовано от AbstractMap) |
Remove(Object, Object) |
Удаляет сопоставление указанного ключа с этой карты, если оно имеется. (Унаследовано от HashMap) |
RemoveEldestEntry(IMapEntry) |
Возвращает значение |
Replace(Object, Object) |
Реализация хэш-таблицы и связанного |
Replace(Object, Object, Object) |
Реализация хэш-таблицы и связанного |
ReplaceAll(IBiFunction) |
Реализация хэш-таблицы и связанного |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
Size() |
Добавление (Унаследовано от AbstractMap) |
ToArray<T>() |
Реализация хэш-таблицы и связанного |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
Реализация хэш-таблицы и связанного |
Values() |
Добавление (Унаследовано от AbstractMap) |
Wait() |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>. (Унаследовано от Object) |
Wait(Int64) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
Реализация хэш-таблицы и связанного |
IJavaPeerable.DisposeUnlessReferenced() |
Реализация хэш-таблицы и связанного |
IJavaPeerable.Finalized() |
Реализация хэш-таблицы и связанного |
IJavaPeerable.JniManagedPeerState |
Реализация хэш-таблицы и связанного |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Реализация хэш-таблицы и связанного |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Реализация хэш-таблицы и связанного |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Реализация хэш-таблицы и связанного |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверенное средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Реализация хэш-таблицы и связанного |
GetJniTypeName(IJavaPeerable) |
Реализация хэш-таблицы и связанного |