1# @ohos.util.HashMap (非线性容器HashMap) 2 3HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value。 4 5HashMap和[TreeMap](js-apis-treemap.md)相比,HashMap依据键的hashCode存取数据,访问速度较快。而TreeMap是有序存取,效率较低。 6 7[HashSet](js-apis-hashset.md)基于HashMap实现。HashMap的输入参数由key、value两个值组成。在HashSet中,只对value对象进行处理。 8 9**推荐使用场景:** 需要快速存取、删除以及插入键值对数据时,推荐使用HashMap。 10 11文档中存在泛型的使用,涉及以下泛型标记符:<br> 12- K:Key,键<br> 13- V:Value,值 14 15> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 16> 17> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 18 19 20## 导入模块 21 22```ts 23import HashMap from '@ohos.util.HashMap'; 24``` 25 26## HashMap 27 28### 属性 29 30**系统能力:** SystemCapability.Utils.Lang 31 32| 名称 | 类型 | 可读 | 可写 | 说明 | 33| -------- | -------- | -------- | -------- | -------- | 34| length | number | 是 | 否 | HashMap的元素个数。 | 35 36 37### constructor 38 39constructor() 40 41HashMap的构造函数。 42 43**系统能力:** SystemCapability.Utils.Lang 44 45**错误码:** 46 47以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 48 49| 错误码ID | 错误信息 | 50| -------- | -------- | 51| 10200012 | The HashMap's constructor cannot be directly invoked. | 52 53**示例:** 54 55```ts 56let hashMap = new HashMap(); 57``` 58 59 60### isEmpty 61 62isEmpty(): boolean 63 64判断该HashMap是否为空。 65 66**系统能力:** SystemCapability.Utils.Lang 67 68**返回值:** 69 70| 类型 | 说明 | 71| -------- | -------- | 72| boolean | 为空返回true,不为空返回false。 | 73 74**错误码:** 75 76以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 77 78| 错误码ID | 错误信息 | 79| -------- | -------- | 80| 10200011 | The isEmpty method cannot be bound. | 81 82**示例:** 83 84```ts 85const hashMap = new HashMap(); 86let result = hashMap.isEmpty(); 87``` 88 89 90### hasKey 91 92hasKey(key: K): boolean 93 94判断此HashMap中是否含有该指定key。 95 96**系统能力:** SystemCapability.Utils.Lang 97 98**参数:** 99 100| 参数名 | 类型 | 必填 | 说明 | 101| -------- | -------- | -------- | -------- | 102| key | K | 是 | 指定Key。 | 103 104**返回值:** 105 106| 类型 | 说明 | 107| -------- | -------- | 108| boolean | 包含指定Key返回true,否则返回false。 | 109 110**错误码:** 111 112以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 113 114| 错误码ID | 错误信息 | 115| -------- | -------- | 116| 10200011 | The hasKey method cannot be bound. | 117 118**示例:** 119 120```ts 121let hashMap = new HashMap(); 122hashMap.set("squirrel", 123); 123let result = hashMap.hasKey("squirrel"); 124``` 125 126 127### hasValue 128 129hasValue(value: V): boolean 130 131判断此HashMap中是否含有该指定value。 132 133**系统能力:** SystemCapability.Utils.Lang 134 135**参数:** 136 137| 参数名 | 类型 | 必填 | 说明 | 138| -------- | -------- | -------- | -------- | 139| value | V | 是 | 指定value。 | 140 141**返回值:** 142 143| 类型 | 说明 | 144| -------- | -------- | 145| boolean | 包含指定value返回true,否则返回false。 | 146 147**错误码:** 148 149以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 150 151| 错误码ID | 错误信息 | 152| -------- | -------- | 153| 10200011 | The hasValue method cannot be bound. | 154 155**示例:** 156 157```ts 158let hashMap = new HashMap(); 159hashMap.set("squirrel", 123); 160let result = hashMap.hasValue(123); 161``` 162 163 164### get 165 166get(key: K): V 167 168获取指定key所对应的value。 169 170**系统能力:** SystemCapability.Utils.Lang 171 172**参数:** 173 174| 参数名 | 类型 | 必填 | 说明 | 175| -------- | -------- | -------- | -------- | 176| key | K | 是 | 查找的指定key。 | 177 178**返回值:** 179 180| 类型 | 说明 | 181| -------- | -------- | 182| V | 返回key映射的value值。 | 183 184**错误码:** 185 186以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 187 188| 错误码ID | 错误信息 | 189| -------- | -------- | 190| 10200011 | The get method cannot be bound. | 191 192**示例:** 193 194```ts 195let hashMap = new HashMap(); 196hashMap.set("squirrel", 123); 197hashMap.set("sparrow", 356); 198let result = hashMap.get("sparrow"); 199``` 200 201 202### setAll 203 204setAll(map: HashMap<K, V>): void 205 206将一个HashMap中的所有元素组添加到另一个hashMap中。 207 208**系统能力:** SystemCapability.Utils.Lang 209 210**参数:** 211 212| 参数名 | 类型 | 必填 | 说明 | 213| -------- | -------- | -------- | -------- | 214| map | HashMap<K, V> | 是 | 被添加元素的hashMap。 | 215 216**错误码:** 217 218以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 219 220| 错误码ID | 错误信息 | 221| -------- | -------- | 222| 10200011 | The setAll method cannot be bound. | 223 224**示例:** 225 226```ts 227let hashMap = new HashMap(); 228hashMap.set("squirrel", 123); 229hashMap.set("sparrow", 356); 230let newHashMap = new HashMap(); 231newHashMap.set("newMap", 99); 232hashMap.setAll(newHashMap); 233``` 234 235 236### set 237 238set(key: K, value: V): Object 239 240向HashMap中添加一组数据。 241 242**系统能力:** SystemCapability.Utils.Lang 243 244**参数:** 245 246| 参数名 | 类型 | 必填 | 说明 | 247| -------- | -------- | -------- | -------- | 248| key | K | 是 | 添加成员数据的键名。 | 249| value | V | 是 | 添加成员数据的值。 | 250 251**返回值:** 252 253| 类型 | 说明 | 254| -------- | -------- | 255| Object | 返回添加后的hashMap。 | 256 257**错误码:** 258 259以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 260 261| 错误码ID | 错误信息 | 262| -------- | -------- | 263| 10200011 | The set method cannot be bound. | 264 265**示例:** 266 267```ts 268let hashMap = new HashMap(); 269let result = hashMap.set("squirrel", 123); 270``` 271 272 273### remove 274 275remove(key: K): V 276 277删除指定key所对应元素。 278 279**系统能力:** SystemCapability.Utils.Lang 280 281**参数:** 282 283| 参数名 | 类型 | 必填 | 说明 | 284| -------- | -------- | -------- | -------- | 285| key | K | 是 | 指定key。 | 286 287**返回值:** 288 289| 类型 | 说明 | 290| -------- | -------- | 291| V | 返回删除元素的值。 | 292 293**错误码:** 294 295以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 296 297| 错误码ID | 错误信息 | 298| -------- | -------- | 299| 10200011 | The remove method cannot be bound. | 300 301**示例:** 302 303```ts 304let hashMap = new HashMap(); 305hashMap.set("squirrel", 123); 306hashMap.set("sparrow", 356); 307let result = hashMap.remove("sparrow"); 308``` 309 310 311### clear 312 313clear(): void 314 315清除HashMap中的所有元素,并把length置为0。 316 317**系统能力:** SystemCapability.Utils.Lang 318 319**错误码:** 320 321以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 322 323| 错误码ID | 错误信息 | 324| -------- | -------- | 325| 10200011 | The clear method cannot be bound. | 326 327**示例:** 328 329```ts 330let hashMap = new HashMap(); 331hashMap.set("squirrel", 123); 332hashMap.set("sparrow", 356); 333hashMap.clear(); 334``` 335 336 337### keys 338 339keys(): IterableIterator<K> 340 341返回包含此映射中包含的键的新迭代器对象。 342 343**系统能力:** SystemCapability.Utils.Lang 344 345**返回值:** 346 347| 类型 | 说明 | 348| -------- | -------- | 349| IterableIterator<K> | 返回一个迭代器。 | 350 351**错误码:** 352 353以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 354 355| 错误码ID | 错误信息 | 356| -------- | -------- | 357| 10200011 | The keys method cannot be bound. | 358 359**示例:** 360 361```ts 362let hashMap = new HashMap(); 363hashMap.set("squirrel", 123); 364hashMap.set("sparrow", 356); 365let iter = hashMap.keys(); 366let temp = iter.next().value; 367while(temp != undefined) { 368 console.log("value:" + temp); 369 temp = iter.next().value; 370} 371``` 372 373 374### values 375 376values(): IterableIterator<V> 377 378返回包含此映射中包含的键值的新迭代器对象。 379 380**系统能力:** SystemCapability.Utils.Lang 381 382**返回值:** 383 384| 类型 | 说明 | 385| -------- | -------- | 386| IterableIterator<V> | 返回一个迭代器。 | 387 388**错误码:** 389 390以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 391 392| 错误码ID | 错误信息 | 393| -------- | -------- | 394| 10200011 | The values method cannot be bound. | 395 396**示例:** 397 398```ts 399let hashMap = new HashMap(); 400hashMap.set("squirrel", 123); 401hashMap.set("sparrow", 356); 402let iter = hashMap.values(); 403let temp = iter.next().value; 404while(temp != undefined) { 405 console.log("value:" + temp); 406 temp = iter.next().value; 407} 408``` 409 410 411### replace 412 413replace(key: K, newValue: V): boolean 414 415对HashMap中一组数据进行更新(替换)。 416 417**系统能力:** SystemCapability.Utils.Lang 418 419**参数:** 420 421| 参数名 | 类型 | 必填 | 说明 | 422| -------- | -------- | -------- | -------- | 423| key | K | 是 | 依据key指定替换的元素。 | 424| newValue | V | 是 | 替换成员数据的值。 | 425 426**返回值:** 427 428| 类型 | 说明 | 429| -------- | -------- | 430| boolean | 是否成功对已有数据进行替换 | 431 432**错误码:** 433 434以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 435 436| 错误码ID | 错误信息 | 437| -------- | -------- | 438| 10200011 | The replace method cannot be bound. | 439 440**示例:** 441 442```ts 443let hashMap = new HashMap(); 444hashMap.set("sparrow", 123); 445let result = hashMap.replace("sparrow", 357); 446``` 447 448 449### forEach 450 451forEach(callbackFn: (value?: V, key?: K, map?: HashMap<K, V>) => void, thisArg?: Object): void 452 453通过回调函数来遍历HashMap实例对象上的元素以及元素对应的下标。 454 455**系统能力:** SystemCapability.Utils.Lang 456 457**参数:** 458 459| 参数名 | 类型 | 必填 | 说明 | 460| -------- | -------- | -------- | -------- | 461| callbackFn | function | 是 | 回调函数。 | 462| thisArg | Object | 否 | callbackfn被调用时用作this值。 | 463 464callbackfn的参数说明: 465| 参数名 | 类型 | 必填 | 说明 | 466| -------- | -------- | -------- | -------- | 467| value | V | 否 | 当前遍历到的元素键值对的值。 | 468| key | K | 否 | 当前遍历到的元素键值对的键。 | 469| map | HashMap<K, V> | 否 | 当前调用forEach方法的实例对象。 | 470 471**错误码:** 472 473以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 474 475| 错误码ID | 错误信息 | 476| -------- | -------- | 477| 10200011 | The forEach method cannot be bound. | 478 479**示例:** 480 481```ts 482let hashMap = new HashMap(); 483hashMap.set("sparrow", 123); 484hashMap.set("gull", 357); 485hashMap.forEach((value, key) => { 486 console.log("value:" + value, "key:" + key); 487}); 488``` 489 490 491### entries 492 493entries(): IterableIterator<[K, V]> 494 495返回包含此映射中包含的键值对的新迭代器对象。 496 497**系统能力:** SystemCapability.Utils.Lang 498 499**返回值:** 500 501| 类型 | 说明 | 502| -------- | -------- | 503| IterableIterator<[K, V]> | 返回一个迭代器。 | 504 505**错误码:** 506 507以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 508 509| 错误码ID | 错误信息 | 510| -------- | -------- | 511| 10200011 | The entries method cannot be bound. | 512 513**示例:** 514 515```ts 516let hashMap = new HashMap(); 517hashMap.set("squirrel", 123); 518hashMap.set("sparrow", 356); 519let iter = hashMap.entries(); 520let temp = iter.next().value; 521while(temp != undefined) { 522 console.log("key:" + temp[0]); 523 console.log("value:" + temp[1]); 524 temp = iter.next().value; 525} 526``` 527 528 529### [Symbol.iterator] 530 531[Symbol.iterator]\(): IterableIterator<[K, V]> 532 533返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 534 535**系统能力:** SystemCapability.Utils.Lang 536 537**返回值:** 538 539| 类型 | 说明 | 540| -------- | -------- | 541| IterableIterator<[K, V]> | 返回一个迭代器。 | 542 543**错误码:** 544 545以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 546 547| 错误码ID | 错误信息 | 548| -------- | -------- | 549| 10200011 | The Symbol.iterator method cannot be bound. | 550 551**示例:** 552```ts 553let hashMap = new HashMap(); 554hashMap.set("squirrel", 123); 555hashMap.set("sparrow", 356); 556 557// 使用方法一: 558for (let item of hashMap) { 559 console.log("key:" + item[0]); 560 console.log("value:" + item[1]); 561} 562 563// 使用方法二: 564let iter = hashMap[Symbol.iterator](); 565let temp = iter.next().value; 566while(temp != undefined) { 567 console.log("key:" + temp[0]); 568 console.log("value:" + temp[1]); 569 temp = iter.next().value; 570} 571```