js-apis-hashset.md 8.9 KB
Newer Older
1
# @ohos.util.HashSet (非线性容器HashSet)
L
linhaoran 已提交
2

3 4 5 6 7
HashSet基于[HashMap](js-apis-hashmap.md)实现。在HashSet中,只对value对象进行处理。

HashSet和[TreeSet](js-apis-treeset.md)相比,HashSet中的数据无序存放,即存放元素的顺序和取出的顺序不一致,而TreeSet是有序存放。它们集合中的元素都不允许重复,但HashSet允许放入null值,TreeSet不允许。

**推荐使用场景:** 可以利用HashSet不重复的特性,当需要不重复的集合或需要去重某个集合的时候使用。
L
linhaoran 已提交
8

B
bi-hu 已提交
9 10 11 12 13 14 15
文档中存在泛型的使用,涉及以下泛型标记符:<br>
- T:Type,类

> **说明:**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

L
lengchangjing 已提交
16

L
linhaoran 已提交
17 18
## 导入模块

19
```ts
20
import HashSet from '@ohos.util.HashSet';
L
linhaoran 已提交
21 22 23 24 25 26
```

## HashSet

### 属性

Z
zengyawen 已提交
27 28
**系统能力:** SystemCapability.Utils.Lang

L
liu-ganlin 已提交
29
| 名称 | 类型 | 可读 | 可写 | 说明 |
L
linhaoran 已提交
30
| -------- | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
31
| length | number | 是 | 否 | HashSet的元素个数。 |
L
linhaoran 已提交
32

L
lengchangjing 已提交
33 34 35 36 37 38 39 40 41 42 43
**示例:**

```ts
let hashSet = new HashSet();
hashSet.add(1);
hashSet.add(2);
hashSet.add(3);
hashSet.add(4);
hashSet.add(5);
let res = hashSet.length;
```
L
linhaoran 已提交
44 45 46

### constructor

Z
zengyawen 已提交
47
constructor()
L
linhaoran 已提交
48 49 50

HashSet的构造函数。

Z
zengyawen 已提交
51 52
**系统能力:** SystemCapability.Utils.Lang

L
liu-ganlin 已提交
53 54
**错误码:**

B
bi-hu 已提交
55
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
56

L
liu-ganlin 已提交
57
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
58 59 60
| -------- | -------- |
| 10200012 | The HashSet's constructor cannot be directly invoked. |

Z
zengyawen 已提交
61 62
**示例:**

63
```ts
Z
zengyawen 已提交
64 65
let hashSet = new HashSet();
```
L
linhaoran 已提交
66 67 68 69


### isEmpty

Z
zengyawen 已提交
70
isEmpty(): boolean
L
linhaoran 已提交
71 72 73

判断该HashSet是否为空。

Z
zengyawen 已提交
74 75
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
76
**返回值:**
L
linhaoran 已提交
77

Z
zengyawen 已提交
78 79 80 81
| 类型 | 说明 |
| -------- | -------- |
| boolean | 为空返回true,不为空返回false。 |

L
liu-ganlin 已提交
82 83
**错误码:**

B
bi-hu 已提交
84
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
85

L
liu-ganlin 已提交
86
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
87 88 89
| -------- | -------- |
| 10200011 | The isEmpty method cannot be bound. |

Z
zengyawen 已提交
90 91
**示例:**

92
```ts
Z
zengyawen 已提交
93
const hashSet = new HashSet();
94
let result = hashSet.isEmpty();
Z
zengyawen 已提交
95
```
L
linhaoran 已提交
96 97 98 99


### has

Z
zengyawen 已提交
100
has(value: T): boolean
L
linhaoran 已提交
101

W
wusongqing 已提交
102
判断此HashSet中是否含有该指定元素。
L
linhaoran 已提交
103

Z
zengyawen 已提交
104 105
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
106 107 108 109 110 111 112
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | T | 是 | 指定元素。 |

**返回值:**
L
linhaoran 已提交
113

Z
zengyawen 已提交
114 115 116
| 类型 | 说明 |
| -------- | -------- |
| boolean | 包含指定元素返回true,否则返回false。 |
L
linhaoran 已提交
117

L
liu-ganlin 已提交
118 119
**错误码:**

B
bi-hu 已提交
120
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
121

L
liu-ganlin 已提交
122
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
123 124 125
| -------- | -------- |
| 10200011 | The has method cannot be bound. |

Z
zengyawen 已提交
126 127
**示例:**

128
```ts
Z
zengyawen 已提交
129
let hashSet = new HashSet();
L
lengchangjing 已提交
130
hashSet.add("squirrel");
B
bi-hu 已提交
131
let result = hashSet.has("squirrel");
Z
zengyawen 已提交
132
```
L
linhaoran 已提交
133 134 135 136


### add

Z
zengyawen 已提交
137
add(value: T): boolean
L
linhaoran 已提交
138 139 140

向HashSet中添加数据。

Z
zengyawen 已提交
141 142
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
143 144 145 146 147 148 149
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | T | 是 | 添加成员数据。 |

**返回值:**
L
linhaoran 已提交
150

Z
zengyawen 已提交
151 152 153
| 类型 | 说明 |
| -------- | -------- |
| boolean | 成功增加元素返回true,否则返回false。 |
L
linhaoran 已提交
154

L
liu-ganlin 已提交
155 156
**错误码:**

B
bi-hu 已提交
157
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
158

L
liu-ganlin 已提交
159
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
160 161 162
| -------- | -------- |
| 10200011 | The add method cannot be bound. |

Z
zengyawen 已提交
163 164
**示例:**

165
```ts
Z
zengyawen 已提交
166
let hashSet = new HashSet();
L
lengchangjing 已提交
167
let result = hashSet.add("squirrel");
Z
zengyawen 已提交
168
```
L
linhaoran 已提交
169 170 171 172


### remove

Z
zengyawen 已提交
173
remove(value: T): boolean
L
linhaoran 已提交
174 175 176

删除指定的元素。

Z
zengyawen 已提交
177 178
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
179 180 181 182 183 184 185
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | T | 是 | 指定删除的元素。 |

**返回值:**
L
linhaoran 已提交
186

Z
zengyawen 已提交
187 188 189
| 类型 | 说明 |
| -------- | -------- |
| boolean | 成功删除指定元素返回true,否则返回false。 |
L
linhaoran 已提交
190

L
liu-ganlin 已提交
191 192
**错误码:**

B
bi-hu 已提交
193
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
194

L
liu-ganlin 已提交
195
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
196 197 198
| -------- | -------- |
| 10200011 | The remove method cannot be bound. |

Z
zengyawen 已提交
199 200
**示例:**

201
```ts
Z
zengyawen 已提交
202
let hashSet = new HashSet();
L
lengchangjing 已提交
203 204 205
hashSet.add("squirrel");
hashSet.add("sparrow");
let result = hashSet.remove("sparrow");
Z
zengyawen 已提交
206
```
L
linhaoran 已提交
207 208 209 210


### clear

Z
zengyawen 已提交
211
clear(): void
L
linhaoran 已提交
212 213 214

清除HashSet中的所有元素,并把length置为0。

Z
zengyawen 已提交
215 216
**系统能力:** SystemCapability.Utils.Lang

L
liu-ganlin 已提交
217 218
**错误码:**

B
bi-hu 已提交
219
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
220

L
liu-ganlin 已提交
221
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
222 223 224
| -------- | -------- |
| 10200011 | The clear method cannot be bound. |

Z
zengyawen 已提交
225 226
**示例:**

227
```ts
Z
zengyawen 已提交
228
let hashSet = new HashSet();
L
lengchangjing 已提交
229 230
hashSet.add("squirrel");
hashSet.add("sparrow");
Z
zengyawen 已提交
231 232
hashSet.clear();
```
L
linhaoran 已提交
233 234 235 236


### values

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

W
wusongqing 已提交
239
返回包含此映射中包含的键值的新迭代器对象。
L
linhaoran 已提交
240

Z
zengyawen 已提交
241 242
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
243 244 245 246 247 248
**返回值:**

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

L
liu-ganlin 已提交
249 250
**错误码:**

B
bi-hu 已提交
251
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
252

L
liu-ganlin 已提交
253
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
254 255 256
| -------- | -------- |
| 10200011 | The values method cannot be bound. |

Z
zengyawen 已提交
257 258
**示例:**

259
```ts
Z
zengyawen 已提交
260
let hashSet = new HashSet();
L
lengchangjing 已提交
261 262
hashSet.add("squirrel");
hashSet.add("sparrow");
Z
zengyawen 已提交
263 264 265
let iter = hashSet.values();
let temp = iter.next().value;
while(temp != undefined) {
266
  console.log("value:" + temp);
Z
zengyawen 已提交
267
  temp = iter.next().value;
L
liu-ganlin 已提交
268
}
Z
zengyawen 已提交
269
```
L
linhaoran 已提交
270 271 272 273


### forEach

274
forEach(callbackFn: (value?: T, key?: T, set?: HashSet&lt;T&gt;) => void, thisArg?: Object): void
L
linhaoran 已提交
275 276 277

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

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

Z
zengyawen 已提交
280
**参数:**
L
linhaoran 已提交
281

Z
zengyawen 已提交
282 283
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
284
| callbackFn | function | 是 | 回调函数。 |
Z
zengyawen 已提交
285
| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
L
linhaoran 已提交
286

Z
zengyawen 已提交
287 288 289
callbackfn的参数说明:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
290
| value | T | 否 | 当前遍历到的元素键值对的值。 |
Z
zengyawen 已提交
291
| key | T | 否 | 当前遍历到的元素键值对的值(和value相同)。 |
292
| set | HashSet&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
L
linhaoran 已提交
293

L
liu-ganlin 已提交
294 295
**错误码:**

B
bi-hu 已提交
296
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
297

L
liu-ganlin 已提交
298
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
299 300 301
| -------- | -------- |
| 10200011 | The forEach method cannot be bound. |

Z
zengyawen 已提交
302 303
**示例:**

304
```ts
Z
zengyawen 已提交
305
let hashSet = new HashSet();
L
lengchangjing 已提交
306 307
hashSet.add("sparrow");
hashSet.add("squirrel");
Z
zengyawen 已提交
308
hashSet.forEach((value, key) => {
309
    console.log("value:" + value, "key:" + key);
Z
zengyawen 已提交
310 311
});
```
L
linhaoran 已提交
312 313 314


### entries
Z
zengyawen 已提交
315
entries(): IterableIterator<[T, T]>
L
linhaoran 已提交
316

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

Z
zengyawen 已提交
319 320
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
321 322 323 324
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
325
| IterableIterator<[T, T]> | 返回一个迭代器。 |
Z
zengyawen 已提交
326

L
liu-ganlin 已提交
327 328
**错误码:**

B
bi-hu 已提交
329
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
330

L
liu-ganlin 已提交
331
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
332 333 334
| -------- | -------- |
| 10200011 | The entries method cannot be bound. |

Z
zengyawen 已提交
335 336
**示例:**

337
```ts
Z
zengyawen 已提交
338
let hashSet = new HashSet();
L
lengchangjing 已提交
339 340
hashSet.add("squirrel");
hashSet.add("sparrow");
Z
zengyawen 已提交
341 342 343
let iter = hashSet.entries();
let temp = iter.next().value;
while(temp != undefined) {
344 345
  console.log("key:" + temp[0]);
  console.log("value:" + temp[1]);
Z
zengyawen 已提交
346 347 348
  temp = iter.next().value;
}
```
L
linhaoran 已提交
349 350 351 352


### [Symbol.iterator]

Z
zengyawen 已提交
353
[Symbol.iterator]\(): IterableIterator&lt;T&gt;
L
linhaoran 已提交
354

Z
zengyawen 已提交
355 356 357
返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。

**系统能力:** SystemCapability.Utils.Lang
L
linhaoran 已提交
358

Z
zengyawen 已提交
359 360 361 362 363 364
**返回值:**

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

L
liu-ganlin 已提交
365 366
**错误码:**

B
bi-hu 已提交
367
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
368

L
liu-ganlin 已提交
369
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
370 371 372
| -------- | -------- |
| 10200011 | The Symbol.iterator method cannot be bound. |

Z
zengyawen 已提交
373 374
**示例:**

375
```ts
Z
zengyawen 已提交
376
let hashSet = new HashSet();
L
lengchangjing 已提交
377 378
hashSet.add("squirrel");
hashSet.add("sparrow");
Z
zengyawen 已提交
379 380 381 382 383 384 385 386 387 388

// 使用方法一:
for (let item of hashSet) { 
  console.log("value: " + item);
}

// 使用方法二:
let iter = hashSet[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
389
  console.log("value: " + temp);
Z
zengyawen 已提交
390 391 392
  temp = iter.next().value;
}
```