An insertion-ordered Map with expected constant-time lookup.
A non-constant map literal, like {"a": 42, "b": 7}, is a LinkedHashMap.
The keys, values and entries are iterated in key insertion order.
The map uses a hash-table to look up entries, so keys must have suitable implementations of Object.operator== and Object.hashCode. If the hash codes are not well-distributed, the performance of map operations may suffer.
The insertion order of keys is remembered, and keys are iterated in the order they were inserted into the map. Values and entries are iterated in their corresponding key's order. Changing a key's value, when the key is already in the map, does not change the iteration order, but removing the key and adding it again will make it be last in the iteration order.
Notice: Do not modify a map (add or remove keys) while an operation is being performed on that map, for example in functions called during a forEach or putIfAbsent call, or while iterating the map (keys, values or entries).
The keys of a LinkedHashMap must have consistent Object.== and Object.hashCode implementations. This means that the == operator must define a stable equivalence relation on the keys (reflexive, symmetric, transitive, and consistent over time), and that hashCode must be the same for objects that are considered equal by ==.
Example:
final planetsByDiameter = {0.949: 'Venus'}; // A new LinkedHashMap To add data to a map, use operator[]=, addAll or addEntries.
planetsByDiameter[1] = 'Earth';
planetsByDiameter.addAll({0.532: 'Mars', 11.209: 'Jupiter'}); To check if the map is empty, use isEmpty or isNotEmpty. To find the number of map entries, use length.
print(planetsByDiameter.isEmpty); // false
print(planetsByDiameter.length); // 4
print(planetsByDiameter);
// {0.949: Venus, 1.0: Earth, 0.532: Mars, 11.209: Jupiter} The forEach method calls a function for each key/value entry of the map.
planetsByDiameter.forEach((key, value) {
print('$key \t $value');
// 0.949 Venus
// 1.0 Earth
// 0.532 Mars
// 11.209 Jupiter
}); To check whether the map has an entry with a specific key, use containsKey.
final keyOneExists = planetsByDiameter.containsKey(1); // true final keyFiveExists = planetsByDiameter.containsKey(5); // false
To check whether the map has an entry with a specific value, use containsValue.
final earthExists = planetsByDiameter.containsValue('Earth'); // true
final saturnExists = planetsByDiameter.containsValue('Saturn'); // false To remove an entry with a specific key, use remove.
final removedValue = planetsByDiameter.remove(1);
print(removedValue); // Earth
print(planetsByDiameter); // {0.949: Venus, 0.532: Mars, 11.209: Jupiter} To remove multiple entries at the same time, based on their keys and values, use removeWhere.
planetsByDiameter.removeWhere((key, value) => key == 0.949);
print(planetsByDiameter); // {0.532: Mars, 11.209: Jupiter} To conditionally add or modify a value for a specific key, depending on whether there already is an entry with that key, use putIfAbsent or 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} To update the values of all keys, based on the existing key and value, use updateAll.
planetsByDiameter.updateAll((key, value) => 'X');
print(planetsByDiameter); // {0.532: X, 11.209: X, 0.949: X} To remove all entries and empty the map, use clear.
planetsByDiameter.clear();
print(planetsByDiameter); // {}
print(planetsByDiameter.isEmpty); // true See also:
other. entries. iterable. keys to values. other. Example: other to this map. newEntries to this map. RK keys and RV instances, if necessary. key. value. action to each key/value pair of the map. convert function. key, or add a new entry if it isn't there. key and its associated value, if present, from the map. test. key. key, or null if key is not in the map. key with the given value.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-collection/LinkedHashMap-class.html