一、基本概念
Map 是键值对(key-value pairs)的集合,具有以下特性:
- 键唯一性:每个键(key)在 Map 中唯一
- 值可重复:不同键可以对应相同的值
- 无序性:Dart 中的 Map 默认不保证顺序(类似 HashMap)
- 动态类型:键和值可以是任意类型(但通常推荐统一类型)
二、初始化方式
1. 字面量声明
//空 map
Map map = {};
//明确类型声明
Map<int,String> map = {};
2. 构造函数创建
//空 map
Map map = Map();
//明确类型声明
Map<int,String> map = Map<int,String>();
3.使用fromIterable和fromEntries
List<int> list1 = [1,2,3,4,5];
List<String> list2 = ["one","two","three","fore","five"];
Map<int,String> map1 = Map.fromIterables(list1,list2);
print(map1);
//输出:{1: one, 2: two, 3: three, 4: fore, 5: five}
List<MapEntry<String,String>> list = [
MapEntry('我', '张三'),
MapEntry('你', '李四'),
MapEntry('他', '王五')
];
Map map = Map.fromEntries(list);
print(map);
//输出:{我: 张三, 你: 李四, 他: 王五}
三、常用操作方法
1. 添加/更新元素
Map<String,String> map = {};
map['我'] = '张三'; // 添加
map['我'] = '小明'; // 更新
2. 访问元素
print(map['我']); // 输出: 小明
print(map['你']); // 输出: null(键不存在)
3. 删除元素
map.remove('我'); // 删除指定键
map.clear(); // 清空所有条目
4. 检查存在
bool haskey = map.containsKey('我');
bool hasvalue = map.containsValue('小明');
四、遍历方法
1. forEach 方法
map.forEach((key, value) {
print('$key :$value');
});
2. 使用 entries
for (var entry in map.entries) {
print('${entry.key} : ${entry.value}');
}
五、实践注意
-
键唯一性:重复赋值会覆盖旧值
-
空安全:使用空安全操作符(Dart 2.12+)
-
性能考虑:HashMap 的查询时间复杂度为 O(1)
-
类型安全:推荐使用显式类型声明避免运行时错误
六、总结
Dart 中的 Map 是一种键值对集合,键唯一且无序,值可重复。通过字面量(如 {'key': 'value'})或构造函数(如 Map())创建,支持添加、更新、删除和查询操作。适合用于缓存、配置管理等场景。Map 支持类型化声明(如 Map<String, int>)和不可变操作(如 Map.unmodifiable),同时兼容空安全特性,是 Dart 中处理键值数据的核心工具。