深入理解Dart中集合类型:Map

347 阅读2分钟

屏幕截图 2025-02-18 160208.png

一、基本概念

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}');
}

五、实践注意

  1. 键唯一性:重复赋值会覆盖旧值

  2. 空安全:使用空安全操作符(Dart 2.12+)

  3. 性能考虑:HashMap 的查询时间复杂度为 O(1)

  4. 类型安全:推荐使用显式类型声明避免运行时错误

六、总结

Dart 中的 Map 是一种键值对集合,键唯一且无序,值可重复。通过字面量(如 {'key': 'value'})或构造函数(如 Map())创建,支持添加、更新、删除和查询操作。适合用于缓存、配置管理等场景。Map 支持类型化声明(如 Map<String, int>)和不可变操作(如 Map.unmodifiable),同时兼容空安全特性,是 Dart 中处理键值数据的核心工具。