当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart LinkedHashMap用法及代码示例


dart:collection 库中LinkedHashMap 类的用法介绍如下。

带有预期 constant-time 查找的 insertion-ordered Map

非常量映射文字,如 {"a": 42, "b": 7} ,是 LinkedHashMap

keysvaluesentries 以 key 插入顺序进行迭代。

该映射使用 hash-table 来查找条目,因此键必须具有 Object.operator==Object.hashCode 的合适实现。如果哈希码不是well-distributed,则映射操作的性能可能会受到影响。

记住键的插入顺序,并按照插入映射的顺序对键进行迭代。值和条目按其对应键的顺序迭代。更改键的值,当键已经在映射中时,不会更改迭代顺序,但删除键并再次添加它将使其成为迭代顺序中的最后一个。

注意:不要在Map上执行操作时修改Map(添加或删除键),例如在 forEachputIfAbsent 调用期间调用的函数中,或在迭代Map时(keysvaluesentries )。

LinkedHashMap 的键必须具有一致的 Object.==Object.hashCode 实现。这意味着 == 运算符必须在键上定义稳定的等价关系(自反、对称、传递和随时间一致),并且对于被 == 视为相等的对象,hashCode 必须相同。

例子:

final planetsByDiameter = {0.949: 'Venus'}; // A new LinkedHashMap

要将数据添加到Map,请使用 operator[]=addAlladdEntries

planetsByDiameter[1] = 'Earth';
planetsByDiameter.addAll({0.532: 'Mars', 11.209: 'Jupiter'});

要检查Map是否为空,请使用 isEmptyisNotEmpty 。要查找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}

要有条件地添加或修改特定键的值,具体取决于是否已经存在具有该键的条目,请使用 putIfAbsentupdate

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.dev大神的英文原创作品 LinkedHashMap<K, V> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。