js-apis-lightweightset.md 11.8 KB
Newer Older
L
linhaoran 已提交
1 2 3 4 5
# 非线性容器LightWeightSet  

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

6 7 8 9 10 11 12 13 14
LightWeightSet可用于存储一系列值的集合,存储元素中value值唯一。

LightWeightSet依据泛型定义,采用轻量级结构,初始默认容量大小为8,每次扩容大小为原始容量的两倍。

集合中value值的查找依赖于hash算法,通过一个数组存储hash值,然后映射到其他数组中的value值。

LightWeightSet和[HashSet](js-apis-hashset.md)都是用来存储键值的集合,LightWeightSet的占用内存更小。

**推荐使用场景:** 当需要存取某个集合或是对某个集合去重时,推荐使用占用内存更小的LightWeightSet。
L
linhaoran 已提交
15

L
lengchangjing 已提交
16 17 18
文档中存在泛型的使用,涉及以下泛型标记符:<br>
- T: Type, 类

L
linhaoran 已提交
19 20
## 导入模块

21
```ts
22
import LightWeightSet from '@ohos.util.LightWeightSet';  
L
linhaoran 已提交
23 24 25 26 27 28 29 30
```



## LightWeightSet

### 属性

Z
zengyawen 已提交
31 32
**系统能力:** SystemCapability.Utils.Lang

L
linhaoran 已提交
33 34
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
35
| length | number | 是 | 否 | LightWeightSet的元素个数。 |
L
linhaoran 已提交
36 37 38 39


### constructor

Z
zengyawen 已提交
40
constructor()
L
linhaoran 已提交
41 42 43

LightWeightSet的构造函数。

Z
zengyawen 已提交
44 45
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
46 47
**示例:**

48
```ts
Z
zengyawen 已提交
49 50
let lightWeightSet = new LightWeightSet();
```
L
linhaoran 已提交
51 52 53 54


### isEmpty

Z
zengyawen 已提交
55
isEmpty(): boolean
L
linhaoran 已提交
56 57 58

判断该容器是否为空。

Z
zengyawen 已提交
59 60
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
61 62 63 64 65
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 为空返回true,不为空返回false。 |
L
linhaoran 已提交
66

Z
zengyawen 已提交
67 68
**示例:**

69
```ts
Z
zengyawen 已提交
70
const lightWeightSet = new LightWeightSet();
71
let result = lightWeightSet.isEmpty();
Z
zengyawen 已提交
72
```
L
linhaoran 已提交
73 74 75

### add

76
add(obj: T): boolean
L
linhaoran 已提交
77 78 79

向此容器中添加数据。

Z
zengyawen 已提交
80 81
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
82 83 84 85
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
86
| obj | T | 是 | 添加的成员数据。 |
Z
zengyawen 已提交
87 88 89 90 91 92

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 成功添加元素返回true,否则返回false。 |
L
linhaoran 已提交
93

Z
zengyawen 已提交
94
**示例:**
L
linhaoran 已提交
95

96
```ts
Z
zengyawen 已提交
97
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
98
let result = lightWeightSet.add("squirrel");
Z
zengyawen 已提交
99
```
L
linhaoran 已提交
100 101 102 103


### addAll

Z
zengyawen 已提交
104
addAll(set: LightWeightSet&lt;T&gt;): boolean
L
linhaoran 已提交
105 106 107

将另一个容器中的所有元素组添加到当前容器中。

Z
zengyawen 已提交
108 109
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
110 111 112 113
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
114
| set | LightWeightSet&lt;T&gt; | 是 | 提供添加元素的lightWeightSet。 |
L
linhaoran 已提交
115

Z
zengyawen 已提交
116 117
**示例:**

118
```ts
Z
zengyawen 已提交
119
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
120 121
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
Z
zengyawen 已提交
122
let set = new LightWeightSet();
L
lengchangjing 已提交
123
set.add("gull");
124
let result = lightWeightSet.addAll(set);
Z
zengyawen 已提交
125
```
L
linhaoran 已提交
126 127 128 129


### hasAll

Z
zengyawen 已提交
130
hasAll(set: LightWeightSet&lt;T&gt;): boolean
L
linhaoran 已提交
131 132 133

判断此容器中是否含有该指定set中的所有元素。

Z
zengyawen 已提交
134 135
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
136
**参数:**
L
linhaoran 已提交
137

Z
zengyawen 已提交
138 139 140
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| set | LightWeightSet&lt;T&gt; | 是 | 比较对象。 |
L
linhaoran 已提交
141

Z
zengyawen 已提交
142 143 144 145 146 147 148 149
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 包含所有元素返回true,否则返回false。 |

**示例:**

150
```ts
Z
zengyawen 已提交
151
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
152 153
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
Z
zengyawen 已提交
154
let set = new LightWeightSet();
L
lengchangjing 已提交
155
set.add("sparrow");
Z
zengyawen 已提交
156 157
let result = lightWeightSet.hasAll(set);
```
L
linhaoran 已提交
158 159 160 161


### has

162
has(key: T): boolean
L
linhaoran 已提交
163

164
判断此容器中是否含有该指定key。
L
linhaoran 已提交
165

Z
zengyawen 已提交
166 167
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
168
**参数:**
L
linhaoran 已提交
169

Z
zengyawen 已提交
170 171
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
W
wusongqing 已提交
172
| key | T | 是 | 指定key |
L
linhaoran 已提交
173

Z
zengyawen 已提交
174 175 176 177
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
178
| boolean | 包含指定key返回true,否则返回false。 |
Z
zengyawen 已提交
179 180 181

**示例:**

182
```ts
Z
zengyawen 已提交
183
let lightWeightSet = new LightWeightSet();
184
let result = lightWeightSet.has(123);
Z
zengyawen 已提交
185
lightWeightSet.add(123);
186
result = lightWeightSet.has(123);
Z
zengyawen 已提交
187
```
L
linhaoran 已提交
188 189 190 191


### equal

Z
zengyawen 已提交
192 193 194
equal(obj: Object): boolean

判断此容器中是否含有该指定obj同类型的对象。
L
linhaoran 已提交
195

Z
zengyawen 已提交
196 197
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
198
**参数:**
L
linhaoran 已提交
199

Z
zengyawen 已提交
200 201 202
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| obj | Object | 是 | 比较对象。 |
L
linhaoran 已提交
203

Z
zengyawen 已提交
204
**返回值:**
L
linhaoran 已提交
205

Z
zengyawen 已提交
206 207 208 209 210 211
| 类型 | 说明 |
| -------- | -------- |
| boolean | 构成类型相同返回true,否则返回false。 |

**示例:**

212
```ts
Z
zengyawen 已提交
213
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
214 215 216
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
let obj = ["squirrel", "sparrow"];
Z
zengyawen 已提交
217 218
let result = lightWeightSet.equal(obj);
```
L
linhaoran 已提交
219 220


221
### increaseCapacityTo
L
linhaoran 已提交
222

223
increaseCapacityTo(minimumCapacity: number): void
L
linhaoran 已提交
224 225 226

将当前容器扩容至可以容纳指定数量元素。

Z
zengyawen 已提交
227 228
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
229
**参数:**
L
linhaoran 已提交
230

Z
zengyawen 已提交
231 232 233
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| minimumCapacity | number | 是 | 需要容纳数量。 |
L
linhaoran 已提交
234

Z
zengyawen 已提交
235 236
**示例:**

237
```ts
Z
zengyawen 已提交
238
let lightWeightSet = new LightWeightSet();
239
lightWeightSet.increaseCapacityTo(10);
Z
zengyawen 已提交
240
```
L
linhaoran 已提交
241 242 243 244


### getIndexOf

Z
zengyawen 已提交
245
getIndexOf(key: T): number
L
linhaoran 已提交
246 247 248

获取指定key所对应的下标。

Z
zengyawen 已提交
249 250
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
251 252 253 254 255 256 257 258 259 260
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| key | T | 是 | 查找的指定key。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
261
| number | 在lightWeightSet中指定数据的下标。 |
L
linhaoran 已提交
262

Z
zengyawen 已提交
263
**示例:**
L
linhaoran 已提交
264

265
```ts
Z
zengyawen 已提交
266
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
267 268 269
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
let result = lightWeightSet.getIndexOf("sparrow");
Z
zengyawen 已提交
270
```
L
linhaoran 已提交
271 272 273 274


### remove

Z
zengyawen 已提交
275
remove(key: T): T
L
linhaoran 已提交
276

277
删除并返回指定key对应的元素。
L
linhaoran 已提交
278

Z
zengyawen 已提交
279 280
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
281 282 283 284
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
285
| key | T | 是 | 指定key。 |
Z
zengyawen 已提交
286 287 288 289 290 291

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回删除元素的值。 |
L
linhaoran 已提交
292

Z
zengyawen 已提交
293
**示例:**
L
linhaoran 已提交
294

295
```ts
Z
zengyawen 已提交
296
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
297 298 299
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
let result = lightWeightSet.remove("sparrow");
Z
zengyawen 已提交
300
```
L
linhaoran 已提交
301 302 303 304


### removeAt

Z
zengyawen 已提交
305
removeAt(index: number): boolean
L
linhaoran 已提交
306

307
删除指定下标所对应的元素。
L
linhaoran 已提交
308

Z
zengyawen 已提交
309 310
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
311 312 313 314
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
315
| index | number | 是 | 指定下标。 |
L
linhaoran 已提交
316

Z
zengyawen 已提交
317
**返回值:**
L
linhaoran 已提交
318

Z
zengyawen 已提交
319 320 321 322 323 324
| 类型 | 说明 |
| -------- | -------- |
| boolean | 确认是否成功删除元素 |

**示例:**

325
```ts
Z
zengyawen 已提交
326
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
327 328
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
329
let result = lightWeightSet.removeAt(1);
Z
zengyawen 已提交
330
```
L
linhaoran 已提交
331 332 333 334


### getValueAt

Z
zengyawen 已提交
335 336
getValueAt(index: number): T

337
获取此容器中指定下标对应的元素。
Z
zengyawen 已提交
338

Z
zengyawen 已提交
339 340
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
341
**参数:**
L
linhaoran 已提交
342

Z
zengyawen 已提交
343 344
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
345
| index | number | 是 | 指定下标。 |
L
linhaoran 已提交
346

Z
zengyawen 已提交
347
**返回值:**
L
linhaoran 已提交
348

Z
zengyawen 已提交
349 350
| 类型 | 说明 |
| -------- | -------- |
351
| T | 返回指定下标对应的元素。 |
L
linhaoran 已提交
352

Z
zengyawen 已提交
353 354
**参数:**

355
```ts
Z
zengyawen 已提交
356
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
357 358
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
359
let result = lightWeightSet.getValueAt(1);
Z
zengyawen 已提交
360
```
L
linhaoran 已提交
361 362 363 364


### clear

Z
zengyawen 已提交
365 366 367
clear(): void

清除容器中的所有元素,并把length置为0。
L
linhaoran 已提交
368

Z
zengyawen 已提交
369 370
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
371
**示例:**
L
linhaoran 已提交
372

373
```ts
Z
zengyawen 已提交
374
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
375 376
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
Z
zengyawen 已提交
377 378
lightWeightSet.clear();
```
L
linhaoran 已提交
379 380 381 382


### toString

Z
zengyawen 已提交
383
toString(): String
L
linhaoran 已提交
384 385 386

获取包含容器中所有键和值的字符串。

Z
zengyawen 已提交
387 388
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
389
**返回值:**
L
linhaoran 已提交
390

Z
zengyawen 已提交
391 392 393 394 395 396
| 类型 | 说明 |
| -------- | -------- |
| String | 返回对应字符串。 |

**示例:**

397
```ts
Z
zengyawen 已提交
398
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
399 400
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
401
let result = lightWeightSet.toString();
Z
zengyawen 已提交
402
```
L
linhaoran 已提交
403 404 405 406


### toArray

Z
zengyawen 已提交
407
toArray(): Array&lt;T&gt;
L
linhaoran 已提交
408 409 410

获取包含此容器中所有对象的数组。

Z
zengyawen 已提交
411 412
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
413 414 415 416 417
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| Array&lt;T&gt; | 返回对应数组。 |
L
linhaoran 已提交
418

Z
zengyawen 已提交
419 420
**示例:**

421
```ts
Z
zengyawen 已提交
422
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
423 424
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
425
let result = lightWeightSet.toArray();
Z
zengyawen 已提交
426
```
L
linhaoran 已提交
427 428 429 430


### values

Z
zengyawen 已提交
431
values(): IterableIterator&lt;T&gt;
L
linhaoran 已提交
432

433
返回包含此映射中包含的键值的新迭代器对象。
L
linhaoran 已提交
434

Z
zengyawen 已提交
435 436
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
437 438 439 440 441 442 443 444
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| IterableIterator&lt;T&gt; | 返回一个迭代器。 |

**示例:**

445
```ts
Z
zengyawen 已提交
446
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
447 448
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
Z
zengyawen 已提交
449 450 451 452 453 454 455
let iter = lightWeightSet.values();
let index = 0;
while(index < lightWeightSet.length) {
  console.log(JSON.stringify(iter.next().value));
  index++;
}
```
L
linhaoran 已提交
456 457 458 459


### forEach

460
forEach(callbackfn: (value?: T, key?: T, set?: LightWeightSet&lt;T&gt;) => void, thisArg?: Object): void
L
linhaoran 已提交
461 462 463

通过回调函数来遍历LightWeightSet实例对象上的元素以及元素对应的下标。

Z
zengyawen 已提交
464 465
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
466 467 468 469 470 471 472 473 474 475
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callbackfn | function | 是 | 回调函数。 |
| thisArg | Object | 否 | callbackfn被调用时用作this值。 |

callbackfn的参数说明:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
476
| value | T | 否 | 当前遍历到的元素。 |
Z
zengyawen 已提交
477
| key | T | 否 | 当前遍历到的元素(和value相同)。 |
478
| set | LightWeightSet&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
Z
zengyawen 已提交
479 480 481

**示例:**

482
```ts
Z
zengyawen 已提交
483
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
484 485
lightWeightSet.add("sparrow");
lightWeightSet.add("gull");
Z
zengyawen 已提交
486
lightWeightSet.forEach((value, key) => {
487
  console.log("value:" + value, key);
Z
zengyawen 已提交
488 489
});
```
L
linhaoran 已提交
490 491 492 493


### entries

Z
zengyawen 已提交
494
entries(): IterableIterator<[T, T]>
L
linhaoran 已提交
495

496
返回包含此映射中包含的键值对的新迭代器对象。
L
linhaoran 已提交
497

Z
zengyawen 已提交
498 499
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
500 501 502 503 504 505 506 507
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| IterableIterator<[T, T]> | 返回一个迭代器。 |

**示例:**

508
```ts
Z
zengyawen 已提交
509
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
510 511
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
Z
zengyawen 已提交
512 513 514 515 516 517 518
let iter = lightWeightSet.entries();
let index = 0;
while(index < lightWeightSet.length) {
  console.log(JSON.stringify(iter.next().value));
  index++;
}
```
L
linhaoran 已提交
519 520 521 522


### [Symbol.iterator]

Z
zengyawen 已提交
523
[Symbol.iterator]\(): IterableIterator&lt;T&gt;
L
linhaoran 已提交
524 525 526

返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。

Z
zengyawen 已提交
527 528
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
529 530 531 532 533 534 535 536
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| IterableIterator&lt;T&gt; | 返回一个迭代器。 |

**示例:**

537
```ts
Z
zengyawen 已提交
538
let lightWeightSet = new LightWeightSet();
L
lengchangjing 已提交
539 540
lightWeightSet.add("squirrel");
lightWeightSet.add("sparrow");
Z
zengyawen 已提交
541 542 543

// 使用方法一:
for (let item of lightWeightSet) { 
544
  console.log("value:" + item);
Z
zengyawen 已提交
545 546 547 548 549 550
}

// 使用方法二:
let iter = lightWeightSet[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
551
  console.log("value:" + temp);
Z
zengyawen 已提交
552 553 554
  temp = iter.next().value;
}
```