鸿蒙ArkTS 中 Map、HashMap 的方法 set() 和 [] 的区别
1. Map 和 HashMap 的区别
Map:ES6 标准 Map,TypeScript/ArkTS 原生支持
HashMap:ArkTS 提供的 HashMap(来自 @kit.ArkTS),类似 Java 的 HashMap
2. set() 方法 vs [] 索引访问
使用 set() 方法(正确)
let paramsMap = new Map<string, object>()
paramsMap.set('_a', 'detail')
paramsMap.set('_m', 'insurance')
console.log(paramsMap.size) // ✅ 输出: 2
console.log(paramsMap.get('_a')) // ✅ 输出: 'detail'
- 将键值对添加到 Map 内部
- size 会正确增加
- 可通过 get() 获取值
- 可通过 has() 检查键
- 可通过 forEach() 遍历
使用 [] 索引(错误)
let paramsMap = new Map<string, object>()
paramsMap['_a'] = 'detail' // ❌ 错误用法
paramsMap['_m'] = 'insurance'
console.log(paramsMap.size) // ❌ 输出: 0 (不会增加)
console.log(paramsMap.get('_a')) // ❌ 输出: undefined
console.log(paramsMap['_a']) // ⚠️ 输出: 'detail' (但这是对象属性,不是 Map 的键值对)
- 只是给 Map 对象本身添加属性,不是 Map 内部的键值对
- size 不会增加
- get() 无法获取
- has() 返回 false
- forEach() 不会遍历到
3. HashMap 的使用
HashMap 同样需要使用 set() 方法:
import { HashMap } from '@kit.ArkTS'
let hashMap = new HashMap<string, string>()
hashMap.set('key1', 'value1') // ✅ 正确
hashMap['key2'] = 'value2' // ❌ 错误,同样不会增加 size
总结
| 操作 | set()方法 | [] 索引 |
|---|---|---|
| 添加到 Map 内部 | ✅ 是 | ❌ 否(只是对象属性) |
| size 会增加 | ✅ 是 | ❌ 否(只是对象属性) |
| get() 能获取 | ✅ 是 | ❌ 否 |
| has() 能检查 | ✅ 是 | ❌ 否 |
| forEach() 能遍历 | ✅ 是 | ❌ 否 |