dart:collection
库中SplayTreeMap
类的用法介绍如下。
可以相对于彼此排序的 Map 个对象。
该映射基于self-balancing 二叉树。它允许大多数 single-entry 操作在摊销的对数时间内进行。
使用构造函数中传递的compare
函数比较映射的键,用于排序和相等。如果映射仅包含键 a
,则 map.containsKey(b)
将返回 true
当且仅当 compare(a, b) == 0
并且甚至不检查 a == b
的值。如果省略比较函数,则假定对象为 Comparable ,并使用它们的 Comparable.compareTo 方法进行比较。在这种情况下,不可比较的对象(包括 null
)将不能用作键。
要允许使用compare
函数不支持的对象调用operator []、remove 或containsKey,可以提供额外的isValidKey
谓词函数。此函数在对可能不是 K
值的参数值使用 compare
函数之前进行测试。如果省略,isValidKey
函数默认测试值是否为 K
。
注意:不要在Map上执行操作时修改Map(添加或删除键),例如在 forEach 或 putIfAbsent 调用期间调用的函数中,或在迭代Map时(keys,values 或 entries )。
例子:
final planetsByMass = SplayTreeMap<double, String>((a, b) => a.compareTo(b));
要将数据添加到Map,请使用 operator[]= 、 addAll 或 addEntries 。
planetsByMass[0.06] = 'Mercury';
planetsByMass
.addAll({0.81: 'Venus', 1.0: 'Earth', 0.11: 'Mars', 317.83: 'Jupiter'});
要检查Map是否为空,请使用 isEmpty 或 isNotEmpty 。要查找Map条目的数量,请使用 length 。
print(planetsByMass.isEmpty); // false
print(planetsByMass.length); // 5
forEach 方法为映射的每个键/值条目调用一个函数。
planetsByMass.forEach((key, value) {
print('$key \t $value');
// 0.06 Mercury
// 0.11 Mars
// 0.81 Venus
// 1.0 Earth
// 317.83 Jupiter
});
要检查Map是否有带有特定键的条目,请使用 containsKey 。
final keyOneExists = planetsByMass.containsKey(1.0); // true
final keyFiveExists = planetsByMass.containsKey(5); // false
要检查映射是否具有具有特定值的条目,请使用 containsValue 。
final earthExists = planetsByMass.containsValue('Earth'); // true
final plutoExists = planetsByMass.containsValue('Pluto'); // false
要删除具有特定键的条目,请使用 remove 。
final removedValue = planetsByMass.remove(1.0);
print(removedValue); // Earth
要根据它们的键和值同时删除多个条目,请使用 removeWhere 。
planetsByMass.removeWhere((key, value) => key <= 1);
print(planetsByMass); // {317.83: Jupiter}
要有条件地添加或修改特定键的值,具体取决于是否已经存在具有该键的条目,请使用 putIfAbsent 或 update 。
planetsByMass.update(1, (v) => '', ifAbsent: () => 'Earth');
planetsByMass.putIfAbsent(317.83, () => 'Another Jupiter');
print(planetsByMass); // {1.0: Earth, 317.83: Jupiter}
要根据现有的键和值更新所有键的值,请使用 updateAll 。
planetsByMass.updateAll((key, value) => 'X');
print(planetsByMass); // {1.0: X, 317.83: X}
要删除所有条目并清空Map,请使用 clear 。
planetsByMass.clear();
print(planetsByMass.isEmpty); // false
print(planetsByMass); // {}
也可以看看:
- Map ,键/值对集合的通用接口。
- HashMap 是无序的(不保证迭代的顺序)。
- LinkedHashMap 以 key 插入顺序进行迭代。
- 混合类型
-
MapMixin<
K, V>
相关用法
- Dart SplayTreeMap.from用法及代码示例
- Dart SplayTreeMap.containsValue用法及代码示例
- Dart SplayTreeMap.addAll用法及代码示例
- Dart SplayTreeMap.fromIterables用法及代码示例
- Dart SplayTreeMap.fromIterable用法及代码示例
- Dart SplayTreeMap.clear用法及代码示例
- Dart SplayTreeMap.forEach用法及代码示例
- Dart SplayTreeMap.putIfAbsent用法及代码示例
- Dart SplayTreeMap.remove用法及代码示例
- Dart SplayTreeMap.containsKey用法及代码示例
- Dart SplayTreeMap.of用法及代码示例
- Dart SplayTreeMap.updateAll用法及代码示例
- Dart SplayTreeMap.update用法及代码示例
- Dart SplayTreeSet.lookup用法及代码示例
- Dart SplayTreeSet.isEmpty用法及代码示例
- Dart SplayTreeSet用法及代码示例
- Dart SplayTreeSet.addAll用法及代码示例
- Dart SplayTreeSet.remove用法及代码示例
- Dart SplayTreeSet.isNotEmpty用法及代码示例
- Dart SplayTreeSet.retainAll用法及代码示例
- Dart SplayTreeSet.toSet用法及代码示例
- Dart SplayTreeSet.clear用法及代码示例
- Dart SplayTreeSet.removeAll用法及代码示例
- Dart SplayTreeSet.of用法及代码示例
- Dart SplayTreeSet.from用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 SplayTreeMap<K, V> class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。