Класс LinkedHashMap< K, V>
Map с порядком вставки и ожидаемым временем поиска, постоянным относительно размера.
Литерал map, не являющийся константой, например {"a": 42, "b": 7}, — это LinkedHashMap.
Итерация по ключам, значениям и записям выполняется в порядке вставки ключей.
Для поиска записей в map используется хеш-таблица, поэтому ключи должны иметь подходящие реализации Object.operator== и Object.hashCode. Если хеш-коды распределены неравномерно, производительность операций с map может снизиться.
Порядок вставки ключей сохраняется, и итерация по ключам выполняется в порядке их добавления в map. Итерация по значениям и записям выполняется в соответствии с порядком соответствующих ключей. Изменение значения ключа, уже находящегося в map, не влияет на порядок итерации, однако удаление ключа с последующим добавлением снова помещает его в конец этого порядка.
Внимание: Не изменяйте map (не добавляйте и не удаляйте ключи), пока над этой map выполняется операция, например в функциях, вызываемых во время вызова forEach или putIfAbsent, а также во время итерации по map (keys, values или entries).
Ключи LinkedHashMap должны иметь согласованные реализации Object.== и Object.hashCode. Это означает, что оператор == должен задавать на ключах устойчивое отношение эквивалентности (рефлексивное, симметричное, транзитивное и неизменное со временем), а hashCode должно быть одинаковым для объектов, которые считаются равными согласно ==.
Пример:
final planetsByDiameter = {0.949: 'Venus'}; // A new LinkedHashMap Чтобы добавить данные в map, используйте operator[]=, addAll или addEntries.
planetsByDiameter[1] = 'Earth';
planetsByDiameter.addAll({0.532: 'Mars', 11.209: 'Jupiter'}); Чтобы проверить, пуста ли map, используйте isEmpty или isNotEmpty. Чтобы узнать число записей в map, используйте length.
print(planetsByDiameter.isEmpty); // false
print(planetsByDiameter.length); // 4
print(planetsByDiameter);
// {0.949: Venus, 1.0: Earth, 0.532: Mars, 11.209: Jupiter} Метод forEach вызывает функцию для каждой записи «ключ/значение» map.
planetsByDiameter.forEach((key, value) {
print('$key \t $value');
// 0.949 Venus
// 1.0 Earth
// 0.532 Mars
// 11.209 Jupiter
}); Чтобы проверить, содержит ли map запись с определённым ключом, используйте containsKey.
final keyOneExists = planetsByDiameter.containsKey(1); // true final keyFiveExists = planetsByDiameter.containsKey(5); // false
Чтобы проверить, содержит ли map запись с определённым значением, используйте containsValue.
final earthExists = planetsByDiameter.containsValue('Earth'); // true
final saturnExists = planetsByDiameter.containsValue('Saturn'); // false Чтобы удалить запись с определённым ключом, используйте remove.
final removedValue = planetsByDiameter.remove(1);
print(removedValue); // Earth
print(planetsByDiameter); // {0.949: Venus, 0.532: Mars, 11.209: Jupiter} Чтобы одновременно удалить несколько записей на основании их ключей и значений, используйте removeWhere.
planetsByDiameter.removeWhere((key, value) => key == 0.949);
print(planetsByDiameter); // {0.532: Mars, 11.209: Jupiter} Чтобы условно добавить или изменить значение для определённого ключа в зависимости от того, существует ли уже запись с этим ключом, используйте putIfAbsent или update.
planetsByDiameter.update(0.949, (v) => 'Venus', ifAbsent: () => 'Venus');
planetsByDiameter.putIfAbsent(0.532, () => "Another Mars if needed");
print(planetsByDiameter); // {0.532: Mars, 11.209: Jupiter, 0.949: Venus} Чтобы обновить значения всех ключей на основании существующих ключей и значений, используйте updateAll.
planetsByDiameter.updateAll((key, value) => 'X');
print(planetsByDiameter); // {0.532: X, 11.209: X, 0.949: X} Чтобы удалить все записи и очистить map, используйте clear.
planetsByDiameter.clear();
print(planetsByDiameter); // {}
print(planetsByDiameter.isEmpty); // true См. также:
- Map — общий интерфейс коллекций пар ключ/значение.
- HashMap не упорядочена (порядок итерации не гарантируется).
- SplayTreeMap выполняет итерацию по ключам в отсортированном порядке.
- Реализуемые типы
-
-
Map<
K, V>
-
Map<
Конструкторы
- LinkedHashMap({bool equals(K, K)?, int hashCode(K)?, bool isValidKey(dynamic)?}) factory
- Создаёт упорядоченную по вставке хеш-таблицу на основе Map.
- LinkedHashMap.from(Map other) factory
- Создаёт LinkedHashMap, содержащую все пары ключ-значение из
other. - LinkedHashMap.fromEntries(Iterable<
MapEntry< K, V>> entries) factory - Создаёт LinkedHashMap, содержащую записи из
entries. - LinkedHashMap.fromIterable(Iterable iterable, {K key(dynamic element)?, V value(dynamic element)?}) factory
- Создаёт LinkedHashMap, ключи и значения которой вычисляются из
iterable. - LinkedHashMap.fromIterables(Iterable<
K> keys, Iterable< V> values) factory - Создаёт LinkedHashMap, сопоставляя заданные
keysсvalues. - LinkedHashMap.identity() factory
- Создаёт упорядоченную по вставке map, основанную на идентичности объектов.
- LinkedHashMap.of(Map<
K, V> other) factory - Создаёт LinkedHashMap, содержащую все пары ключ-значение из
other. Пример:
Свойства
- entries → Iterable<
MapEntry< K, V>> read-onlyinherited - Записи map this.
- hashCode → int read-onlyinherited
- Хеш-код этого объекта.
- isEmpty → bool read-onlyinherited
- Показывает, отсутствуют ли в map пары ключ/значение.
- isNotEmpty → bool read-onlyinherited
- Показывает, есть ли в map хотя бы одна пара ключ/значение.
- keys → Iterable<
K> read-onlyinherited - Ключи this.
- length → int read-onlyinherited
- Число пар ключ/значение в map.
- runtimeType → Type read-onlyinherited
- Представление типа объекта во время выполнения.
- values → Iterable<
V> read-onlyinherited - Значения this.
Методы
- addAll(
Map< K, V> other) → void inherited - Добавляет в эту map все пары ключ/значение из
other. - addEntries(
Iterable< MapEntry< K, V>> newEntries) → void inherited - Добавляет в эту map все пары ключ/значение из
newEntries. - cast<
RK, RV>( ) → Map< RK, RV> inherited - Предоставляет представление этой map с ключами типа
RKи экземплярами типаRV, если это необходимо. - clear(
) → void inherited - Удаляет из map все записи.
- containsKey(
Object? key) → bool inherited - Содержит ли эта map заданный
key. - containsValue(
Object? value) → bool inherited - Содержит ли эта map заданное
value. - forEach(
void action(K key, V value)) → void inherited - Применяет
actionк каждой паре ключ/значение map. - map<
K2, V2>( MapEntry< K2, V2> convert(K key, V value)) → Map< K2, V2> inherited - Возвращает новую map, в которой все записи этой map преобразованы заданной функцией
convert. - noSuchMethod(
Invocation invocation) → dynamic inherited - Вызывается при обращении к несуществующему методу или свойству.
- putIfAbsent(
K key, V ifAbsent()) → V inherited - Ищет значение для
keyили добавляет новую запись, если её нет. - remove(
Object? key) → V? inherited - Удаляет
keyи связанное с ним значение из map, если они присутствуют. - removeWhere(
bool test(K key, V value)) → void inherited - Удаляет из этой map все записи, соответствующие заданному
test. - toString(
) → String inherited - Строковое представление этого объекта.
- update(
K key, V update(V value), {V ifAbsent()?}) → V inherited - Обновляет значение для указанного
key. - updateAll(
V update(K key, V value)) → void inherited - Обновляет все значения.
Операторы
- operator ==(
Object other) → bool inherited - Оператор равенства.
- operator [](
Object? key) → V? inherited - Значение для заданного
keyилиnull, еслиkeyотсутствует в map. - operator []=(
K key, V value) → void inherited - Связывает
keyс заданнымvalue.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-collection/LinkedHashMap-class.html