鸿蒙ArkTS 中 Map、HashMap 的方法 set() 和 [] 的区别

鸿蒙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() 能遍历 ✅ 是 ❌ 否

建议:统一使用 set() 方法,确保 Map/HashMap 的行为正确,且 size 能正确反映键值对数量。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容