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