1# @ohos.util.LightWeightMap (非线性容器LightWeightMap) 2 3LightWeightMap可用于存储具有关联关系的key-value键值对集合,存储元素中key值唯一,每个key对应一个value。 4 5LightWeightMap依据泛型定义,采用轻量级结构,初始默认容量大小为8,每次扩容大小为原始容量的两倍。 6 7集合中key值的查找依赖于hash算法,通过一个数组存储hash值,然后映射到其他数组中的key值及value值。 8 9LightWeightMap和[HashMap](js-apis-hashmap.md)都是用来存储键值对的集合,LightWeightMap占用内存更小。 10 11**推荐使用场景:** 当需要存取key-value键值对时,推荐使用占用内存更小的LightWeightMap。 12 13文档中存在泛型的使用,涉及以下泛型标记符:<br> 14- K:Key,键<br> 15- V:Value,值 16 17> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 18> 19> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 20 21 22## 导入模块 23 24```ts 25import LightWeightMap from '@ohos.util.LightWeightMap'; 26``` 27 28## LightWeightMap 29 30### 属性 31 32**系统能力:** SystemCapability.Utils.Lang 33 34| 名称 | 类型 | 可读 | 可写 | 说明 | 35| -------- | -------- | -------- | -------- | -------- | 36| length | number | 是 | 否 | LightWeightMap的元素个数。 | 37 38 39### constructor 40 41constructor() 42 43LightWeightMap的构造函数。 44 45**系统能力:** SystemCapability.Utils.Lang 46 47 48**错误码:** 49 50以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 51 52| 错误码ID | 错误信息 | 53| -------- | -------- | 54| 10200012 | The LightWeightMap's constructor cannot be directly invoked. | 55 56**示例:** 57 58```ts 59let lightWeightMap = new LightWeightMap(); 60``` 61 62 63### isEmpty 64 65isEmpty(): boolean 66 67判断该LightWeightMap是否为空。 68 69**系统能力:** SystemCapability.Utils.Lang 70 71**返回值:** 72 73| 类型 | 说明 | 74| -------- | -------- | 75| boolean | 为空返回true,不为空返回false。 | 76 77**错误码:** 78 79以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 80 81| 错误码ID | 错误信息 | 82| -------- | -------- | 83| 10200011 | The isEmpty method cannot be bound. | 84 85**示例:** 86 87```ts 88const lightWeightMap = new LightWeightMap(); 89let result = lightWeightMap.isEmpty(); 90``` 91 92 93### hasAll 94 95hasAll(map: LightWeightMap<K, V>): boolean 96 97判断此LightWeightMap中是否含有该指定map中的所有元素。 98 99**系统能力:** SystemCapability.Utils.Lang 100 101**参数:** 102 103| 参数名 | 类型 | 必填 | 说明 | 104| -------- | -------- | -------- | -------- | 105| map | LightWeightMap<K, V> | 是 | 比较对象。 | 106 107**返回值:** 108 109| 类型 | 说明 | 110| -------- | -------- | 111| boolean | 包含所有元素返回true,否则返回false。 | 112 113**错误码:** 114 115以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 116 117| 错误码ID | 错误信息 | 118| -------- | -------- | 119| 10200011 | The hasAll method cannot be bound. | 120 121**示例:** 122 123```ts 124let lightWeightMap = new LightWeightMap(); 125lightWeightMap.set("squirrel", 123); 126lightWeightMap.set("sparrow", 356); 127let map = new LightWeightMap(); 128map.set("sparrow", 356); 129let result = lightWeightMap.hasAll(map); 130``` 131 132 133### hasKey 134 135hasKey(key: K): boolean; 136 137判断此LightWeightMap中是否含有该指定key。 138 139**系统能力:** SystemCapability.Utils.Lang 140 141**参数:** 142 143| 参数名 | 类型 | 必填 | 说明 | 144| -------- | -------- | -------- | -------- | 145| key | K | 是 | 指定key。 | 146 147**返回值:** 148 149| 类型 | 说明 | 150| -------- | -------- | 151| boolean | 包含指定key返回true,否则返回false。 | 152 153**错误码:** 154 155以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 156 157| 错误码ID | 错误信息 | 158| -------- | -------- | 159| 10200011 | The hasKey method cannot be bound. | 160 161**示例:** 162 163```ts 164let lightWeightMap = new LightWeightMap(); 165lightWeightMap.set("squirrel", 123); 166let result = lightWeightMap.hasKey("squirrel"); 167``` 168 169 170### hasValue 171 172hasValue(value: V): boolean 173 174判断此LightWeightMap中是否含有该指定value。 175 176**系统能力:** SystemCapability.Utils.Lang 177 178**参数:** 179 180| 参数名 | 类型 | 必填 | 说明 | 181| -------- | -------- | -------- | -------- | 182| value | V | 是 | 指定元素。 | 183 184**返回值:** 185 186| 类型 | 说明 | 187| -------- | -------- | 188| boolean | 包含指定元素返回true,否则返回false。 | 189 190**错误码:** 191 192以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 193 194| 错误码ID | 错误信息 | 195| -------- | -------- | 196| 10200011 | The hasValue method cannot be bound. | 197 198**示例:** 199 200```ts 201let lightWeightMap = new LightWeightMap(); 202lightWeightMap.set("squirrel", 123); 203let result = lightWeightMap.hasValue(123); 204``` 205 206 207### increaseCapacityTo 208 209increaseCapacityTo(minimumCapacity: number): void 210 211将当前LightWeightMap扩容至可以容纳指定数量元素。 212 213**系统能力:** SystemCapability.Utils.Lang 214 215**错误码:** 216 217以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 218 219| 错误码ID | 错误信息 | 220| -------- | -------- | 221| 10200011 | The increaseCapacityTo method cannot be bound. | 222 223**参数:** 224 225| 参数名 | 类型 | 必填 | 说明 | 226| -------- | -------- | -------- | -------- | 227| minimumCapacity | number | 是 | 需要容纳的数量。 | 228 229**示例:** 230 231```ts 232let lightWeightMap = new LightWeightMap(); 233lightWeightMap.increaseCapacityTo(10); 234``` 235 236 237### get 238 239get(key: K): V 240 241获取指定key所对应的value。 242 243**系统能力:** SystemCapability.Utils.Lang 244 245**参数:** 246 247| 参数名 | 类型 | 必填 | 说明 | 248| -------- | -------- | -------- | -------- | 249| key | K | 是 | 指定key。 | 250 251**返回值:** 252 253| 类型 | 说明 | 254| -------- | -------- | 255| V | 返回key映射的value值。 | 256 257**错误码:** 258 259以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 260 261| 错误码ID | 错误信息 | 262| -------- | -------- | 263| 10200011 | The get method cannot be bound. | 264 265**示例:** 266 267```ts 268let lightWeightMap = new LightWeightMap(); 269lightWeightMap.set("squirrel", 123); 270lightWeightMap.set("sparrow", 356); 271let result = lightWeightMap.get("sparrow"); 272``` 273 274 275### getIndexOfKey 276 277getIndexOfKey(key: K): number 278 279查找key元素第一次出现的下标值,如果没有找到该元素返回-1。 280 281**系统能力:** SystemCapability.Utils.Lang 282 283**参数:** 284 285| 参数名 | 类型 | 必填 | 说明 | 286| -------- | -------- | -------- | -------- | 287| key | K | 是 | 被查找的元素。 | 288 289**返回值:** 290 291| 类型 | 说明 | 292| -------- | -------- | 293| number | 返回key元素第一次出现时的下标值,查找失败返回-1。 | 294 295**错误码:** 296 297以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 298 299| 错误码ID | 错误信息 | 300| -------- | -------- | 301| 10200011 | The getIndexOfKey method cannot be bound. | 302 303**示例:** 304 305```ts 306let lightWeightMap = new LightWeightMap(); 307lightWeightMap.set("squirrel", 123); 308lightWeightMap.set("sparrow", 356); 309let result = lightWeightMap.getIndexOfKey("sparrow"); 310``` 311 312 313### getIndexOfValue 314 315getIndexOfValue(value: V): number 316 317查找value元素第一次出现的下标值,如果没有找到该元素返回-1。 318 319**系统能力:** SystemCapability.Utils.Lang 320 321**参数:** 322 323| 参数名 | 类型 | 必填 | 说明 | 324| -------- | -------- | -------- | -------- | 325| value | V | 是 | 被查找的元素。 | 326 327**返回值:** 328 329| 类型 | 说明 | 330| -------- | -------- | 331| number | 返回value元素第一次出现时的下标值,查找失败返回-1。 | 332 333**错误码:** 334 335以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 336 337| 错误码ID | 错误信息 | 338| -------- | -------- | 339| 10200011 | The getIndexOfValue method cannot be bound. | 340 341**示例:** 342 343```ts 344let lightWeightMap = new LightWeightMap(); 345lightWeightMap.set("squirrel", 123); 346lightWeightMap.set("sparrow", 356); 347let result = lightWeightMap.getIndexOfValue(123); 348``` 349 350 351### getKeyAt 352 353getKeyAt(index: number): K 354 355查找指定下标的元素键值对中key值,否则返回undefined。 356 357**系统能力:** SystemCapability.Utils.Lang 358 359**参数:** 360 361| 参数名 | 类型 | 必填 | 说明 | 362| -------- | -------- | -------- | -------- | 363| index | number | 是 | 所查找的下标。 | 364 365**返回值:** 366 367| 类型 | 说明 | 368| -------- | -------- | 369| K | 返回该下标对应的元素键值对中key值。 | 370 371**错误码:** 372 373以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 374 375| 错误码ID | 错误信息 | 376| -------- | -------- | 377| 10200011 | The getKeyAt method cannot be bound. | 378| 10200001 | The value of index is out of range. | 379 380**示例:** 381 382```ts 383let lightWeightMap = new LightWeightMap(); 384lightWeightMap.set("squirrel", 123); 385lightWeightMap.set("sparrow", 356); 386let result = lightWeightMap.getKeyAt(1); 387``` 388 389 390### setAll 391 392setAll(map: LightWeightMap<K, V>): void 393 394将一个LightWeightMap中的所有元素组添加到另一个lightWeightMap中。 395 396**系统能力:** SystemCapability.Utils.Lang 397 398**参数:** 399 400| 参数名 | 类型 | 必填 | 说明 | 401| -------- | -------- | -------- | -------- | 402| map | LightWeightMap<K, V> | 是 | 被添加元素的lightWeightMap。 | 403 404**错误码:** 405 406以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 407 408| 错误码ID | 错误信息 | 409| -------- | -------- | 410| 10200011 | The setAll method cannot be bound. | 411 412**示例:** 413 414```ts 415let lightWeightMap = new LightWeightMap(); 416lightWeightMap.set("squirrel", 123); 417lightWeightMap.set("sparrow", 356); 418let map = new LightWeightMap(); 419map.setAll(lightWeightMap); // 将lightWeightMap中所有的元素添加到map中 420``` 421 422 423### set 424set(key: K, value: V): Object 425 426向LightWeightMap中添加一组数据。 427 428**系统能力:** SystemCapability.Utils.Lang 429 430**参数:** 431 432| 参数名 | 类型 | 必填 | 说明 | 433| -------- | -------- | -------- | -------- | 434| key | K | 是 | 添加成员数据的键名。 | 435| value | V | 是 | 添加成员数据的值。 | 436 437**返回值:** 438 439| 类型 | 说明 | 440| -------- | -------- | 441| Object | 返回添加数据后的lightWeightMap。 | 442 443**错误码:** 444 445以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 446 447| 错误码ID | 错误信息 | 448| -------- | -------- | 449| 10200011 | The set method cannot be bound. | 450 451**示例:** 452 453```ts 454let lightWeightMap = new LightWeightMap(); 455let result = lightWeightMap.set("squirrel", 123); 456``` 457 458 459### remove 460 461remove(key: K): V 462 463删除并返回指定key映射的元素。 464 465**系统能力:** SystemCapability.Utils.Lang 466 467**参数:** 468 469| 参数名 | 类型 | 必填 | 说明 | 470| -------- | -------- | -------- | -------- | 471| key | K | 是 | 指定key。 | 472 473**返回值:** 474 475| 类型 | 说明 | 476| -------- | -------- | 477| V | 返回删除元素的值。 | 478 479**错误码:** 480 481以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 482 483| 错误码ID | 错误信息 | 484| -------- | -------- | 485| 10200011 | The remove method cannot be bound. | 486 487**示例:** 488 489```ts 490let lightWeightMap = new LightWeightMap(); 491lightWeightMap.set("squirrel", 123); 492lightWeightMap.set("sparrow", 356); 493lightWeightMap.remove("sparrow"); 494``` 495 496 497### removeAt 498 499removeAt(index: number): boolean 500 501删除指定下标对应的元素。 502 503**系统能力:** SystemCapability.Utils.Lang 504 505**参数:** 506 507| 参数名 | 类型 | 必填 | 说明 | 508| -------- | -------- | -------- | -------- | 509| index | number | 是 | 指定下标。 | 510 511**返回值:** 512 513| 类型 | 说明 | 514| -------- | -------- | 515| boolean | 成功删除元素返回true,否则返回false。 | 516 517**错误码:** 518 519以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 520 521| 错误码ID | 错误信息 | 522| -------- | -------- | 523| 10200011 | The removeAt method cannot be bound. | 524 525**示例:** 526 527```ts 528let lightWeightMap = new LightWeightMap(); 529lightWeightMap.set("squirrel", 123); 530lightWeightMap.set("sparrow", 356); 531let result = lightWeightMap.removeAt(1); 532``` 533 534 535### setValueAt 536 537setValueAt(index: number, newValue: V): boolean 538 539替换指定下标对应键值对中的元素。 540 541**系统能力:** SystemCapability.Utils.Lang 542 543**参数:** 544 545| 参数名 | 类型 | 必填 | 说明 | 546| -------- | -------- | -------- | -------- | 547| index | number | 是 | 指定下标。 | 548| newValue | V | 是 | 替换键值对中的值。 | 549 550**返回值:** 551 552| 类型 | 说明 | 553| -------- | -------- | 554| boolean | 成功替换指定位置数据返回true,否则返回false。 | 555 556**错误码:** 557 558以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 559 560| 错误码ID | 错误信息 | 561| -------- | -------- | 562| 10200011 | The setValueAt method cannot be bound. | 563| 10200001 | The value of index is out of range. | 564 565**示例:** 566 567```ts 568let lightWeightMap = new LightWeightMap(); 569lightWeightMap.set("squirrel", 123); 570lightWeightMap.set("sparrow", 356); 571lightWeightMap.setValueAt(1, 3546); 572``` 573 574 575### getValueAt 576 577getValueAt(index: number): V 578 579获取指定下标对应键值对中的元素。 580 581**系统能力:** SystemCapability.Utils.Lang 582 583**参数:** 584 585| 参数名 | 类型 | 必填 | 说明 | 586| -------- | -------- | -------- | -------- | 587| index | number | 是 | 指定下标。 | 588 589**返回值:** 590 591| 类型 | 说明 | 592| -------- | -------- | 593| V | 返回指定下标对应键值对中的元素。 | 594 595**错误码:** 596 597以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 598 599| 错误码ID | 错误信息 | 600| -------- | -------- | 601| 10200011 | The getValueAt method cannot be bound. | 602| 10200001 | The value of index is out of range. | 603 604**示例:** 605 606```ts 607let lightWeightMap = new LightWeightMap(); 608lightWeightMap.set("squirrel", 123); 609lightWeightMap.set("sparrow", 356); 610let result = lightWeightMap.getValueAt(1); 611``` 612 613 614### clear 615 616clear(): void 617 618清除LightWeightMap中的所有元素,并把length置为0。 619 620**系统能力:** SystemCapability.Utils.Lang 621 622**错误码:** 623 624以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 625 626| 错误码ID | 错误信息 | 627| -------- | -------- | 628| 10200011 | The clear method cannot be bound. | 629 630**示例:** 631 632```ts 633let lightWeightMap = new LightWeightMap(); 634lightWeightMap.set("squirrel", 123); 635lightWeightMap.set("sparrow", 356); 636lightWeightMap.clear(); 637``` 638 639 640### keys 641 642keys(): IterableIterator<K> 643 644返回包含此映射中包含的键的新迭代器对象。 645 646**系统能力:** SystemCapability.Utils.Lang 647 648**返回值:** 649 650| 类型 | 说明 | 651| -------- | -------- | 652| IterableIterator<K> | 返回一个迭代器。 | 653 654**错误码:** 655 656以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 657 658| 错误码ID | 错误信息 | 659| -------- | -------- | 660| 10200011 | The keys method cannot be bound. | 661 662**示例:** 663 664```ts 665let lightWeightMap = new LightWeightMap(); 666lightWeightMap.set("squirrel", 123); 667lightWeightMap.set("sparrow", 356); 668let iter = lightWeightMap.keys(); 669let temp = iter.next().value; 670while(temp != undefined) { 671 console.log("value:" + temp); 672 temp = iter.next().value; 673} 674``` 675 676 677### values 678 679values(): IterableIterator<V> 680 681返回包含此映射中包含的键值的新迭代器对象。 682 683**系统能力:** SystemCapability.Utils.Lang 684 685**返回值:** 686 687| 类型 | 说明 | 688| -------- | -------- | 689| IterableIterator<V> | 返回一个迭代器。 | 690 691**错误码:** 692 693以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 694 695| 错误码ID | 错误信息 | 696| -------- | -------- | 697| 10200011 | The values method cannot be bound. | 698 699**示例:** 700 701```ts 702let lightWeightMap = new LightWeightMap(); 703lightWeightMap.set("squirrel", 123); 704lightWeightMap.set("sparrow", 356); 705let iter = lightWeightMap.values(); 706let temp = iter.next().value; 707while(temp != undefined) { 708 console.log("value:" + temp); 709 temp = iter.next().value; 710} 711``` 712 713 714### forEach 715 716forEach(callbackFn: (value?: V, key?: K, map?: LightWeightMap<K, V>) => void, thisArg?: Object): void 717 718通过回调函数来遍历实例对象上的元素以及元素对应的下标。 719 720**系统能力:** SystemCapability.Utils.Lang 721 722**参数:** 723 724| 参数名 | 类型 | 必填 | 说明 | 725| -------- | -------- | -------- | -------- | 726| callbackFn | function | 是 | 回调函数。 | 727| thisArg | Object | 否 | callbackfn被调用时用作this值。 | 728 729callbackfn的参数说明: 730| 参数名 | 类型 | 必填 | 说明 | 731| -------- | -------- | -------- | -------- | 732| value | V | 否 | 当前遍历到的元素键值对的值。 | 733| key | K | 否 | 当前遍历到的元素键值对的键。 | 734| map | LightWeightMap<K, V> | 否 | 当前调用forEach方法的实例对象。 | 735 736**错误码:** 737 738以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 739 740| 错误码ID | 错误信息 | 741| -------- | -------- | 742| 10200011 | The forEach method cannot be bound. | 743 744**示例:** 745 746```ts 747let lightWeightMap = new LightWeightMap(); 748lightWeightMap.set("sparrow", 123); 749lightWeightMap.set("gull", 357); 750lightWeightMap.forEach((value, key) => { 751 console.log("value:" + value, "key:" + key); 752}); 753``` 754 755 756### entries 757 758entries(): IterableIterator<[K, V]> 759 760返回包含此映射中包含的键值对的新迭代器对象。 761 762**系统能力:** SystemCapability.Utils.Lang 763 764**返回值:** 765 766| 类型 | 说明 | 767| -------- | -------- | 768| IterableIterator<[K, V]> | 返回一个迭代器。 | 769 770**错误码:** 771 772以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 773 774| 错误码ID | 错误信息 | 775| -------- | -------- | 776| 10200011 | The entries method cannot be bound. | 777 778**示例:** 779 780```ts 781let lightWeightMap = new LightWeightMap(); 782lightWeightMap.set("squirrel", 123); 783lightWeightMap.set("sparrow", 356); 784let iter = lightWeightMap.entries(); 785let temp = iter.next().value; 786while(temp != undefined) { 787 console.log("key:" + temp[0]); 788 console.log("value:" + temp[1]); 789 temp = iter.next().value; 790} 791``` 792 793### toString 794 795toString(): String 796 797将此映射中包含的键值对拼接成字符串,并返回字符串类型。 798 799**系统能力:** SystemCapability.Utils.Lang 800 801**返回值:** 802 803 | 类型 | 说明 | 804 | -------- | -------- | 805 | String | 返回一个字符串。 | 806 807**错误码:** 808 809以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 810 811| 错误码ID | 错误信息 | 812| -------- | -------- | 813| 10200011 | The toString method cannot be bound. | 814 815**示例:** 816 817```ts 818let lightWeightMap = new LightWeightMap(); 819lightWeightMap.set("squirrel", 123); 820lightWeightMap.set("sparrow", 356); 821let result = lightWeightMap.toString(); 822``` 823 824### [Symbol.iterator] 825 826[Symbol.iterator]\(): IterableIterator<[K, V]> 827 828返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 829 830**系统能力:** SystemCapability.Utils.Lang 831 832**返回值:** 833 834| 类型 | 说明 | 835| -------- | -------- | 836| IterableIterator<[K, V]> | 返回一个迭代器。 | 837 838**错误码:** 839 840以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 841 842| 错误码ID | 错误信息 | 843| -------- | -------- | 844| 10200011 | The Symbol.iterator method cannot be bound. | 845 846**示例:** 847 848```ts 849let lightWeightMap = new LightWeightMap(); 850lightWeightMap.set("squirrel", 123); 851lightWeightMap.set("sparrow", 356); 852 853// 使用方法一: 854for (let item of lightWeightMap) { 855 console.log("key:" + item[0]); 856 console.log("value:" + item[1]); 857} 858 859// 使用方法二: 860let iter = lightWeightMap[Symbol.iterator](); 861let temp = iter.next().value; 862while(temp != undefined) { 863 console.log("key:" + temp[0]); 864 console.log("value:" + temp[1]); 865 temp = iter.next().value; 866} 867```