dart:collection
库中LinkedHashMap
类的用法介绍如下。
带有预期 constant-time 查找的 insertion-ordered Map。
非常量映射文字,如 {"a": 42, "b": 7}
,是 LinkedHashMap
。
keys 、 values 和 entries 以 key 插入顺序进行迭代。
该映射使用 hash-table 来查找条目,因此键必须具有 Object.operator== 和 Object.hashCode 的合适实现。如果哈希码不是well-distributed,则映射操作的性能可能会受到影响。
记住键的插入顺序,并按照插入映射的顺序对键进行迭代。值和条目按其对应键的顺序迭代。更改键的值,当键已经在映射中时,不会更改迭代顺序,但删除键并再次添加它将使其成为迭代顺序中的最后一个。
注意:不要在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 方法为映射的每个键/值条目调用一个函数。
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
要检查映射是否具有具有特定值的条目,请使用 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>
相关用法
- Dart LinkedHashMap.from用法及代码示例
- Dart LinkedHashMap.fromEntries用法及代码示例
- Dart LinkedHashMap.fromIterables用法及代码示例
- Dart LinkedHashMap.identity用法及代码示例
- Dart LinkedHashMap.fromIterable用法及代码示例
- Dart LinkedHashMap.of用法及代码示例
- Dart LinkedHashMap构造函数用法及代码示例
- Dart LinkedHashSet.from用法及代码示例
- Dart LinkedHashSet构造函数用法及代码示例
- Dart LinkedHashSet.identity用法及代码示例
- Dart LinkedHashSet用法及代码示例
- Dart LinkedHashSet.of用法及代码示例
- Dart LinkedList.isEmpty用法及代码示例
- Dart LinkedList用法及代码示例
- Dart Link.resolveSymbolicLinks用法及代码示例
- Dart Link.resolveSymbolicLinksSync用法及代码示例
- Dart LineSplitter用法及代码示例
- Dart ListMixin.expand用法及代码示例
- Dart List.first用法及代码示例
- Dart List.sort用法及代码示例
- Dart ListMixin.contains用法及代码示例
- Dart ListQueue.of用法及代码示例
- Dart ListQueue.contains用法及代码示例
- Dart ListMixin.join用法及代码示例
- Dart ListMixin.setAll用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 LinkedHashMap<K, V> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。