1# @ohos.util.HashSet (非线性容器HashSet) 2 3HashSet基于[HashMap](js-apis-hashmap.md)实现。在HashSet中,只对value对象进行处理。 4 5HashSet和[TreeSet](js-apis-treeset.md)相比,HashSet中的数据无序存放,即存放元素的顺序和取出的顺序不一致,而TreeSet是有序存放。它们集合中的元素都不允许重复,但HashSet允许放入null值,TreeSet不建议存放null值,可能会对排序结果产生影响。 6 7**推荐使用场景:** 可以利用HashSet不重复的特性,当需要不重复的集合或需要去重某个集合的时候使用。 8 9文档中存在泛型的使用,涉及以下泛型标记符:<br> 10- T:Type,类 11 12> **说明:** 13> 14> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 15 16 17## 导入模块 18 19```ts 20import HashSet from '@ohos.util.HashSet'; 21``` 22 23## HashSet 24 25### 属性 26 27**系统能力:** SystemCapability.Utils.Lang 28 29| 名称 | 类型 | 可读 | 可写 | 说明 | 30| -------- | -------- | -------- | -------- | -------- | 31| length | number | 是 | 否 | HashSet的元素个数。 | 32 33**示例:** 34 35```ts 36let hashSet: HashSet<number> = new HashSet(); 37hashSet.add(1); 38hashSet.add(2); 39hashSet.add(3); 40hashSet.add(4); 41hashSet.add(5); 42let res = hashSet.length; 43``` 44 45### constructor 46 47constructor() 48 49HashSet的构造函数。 50 51**系统能力:** SystemCapability.Utils.Lang 52 53**错误码:** 54 55以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 56 57| 错误码ID | 错误信息 | 58| -------- | -------- | 59| 10200012 | The HashSet's constructor cannot be directly invoked. | 60 61**示例:** 62 63```ts 64let hashSet: HashSet<number> = new HashSet(); 65``` 66 67 68### isEmpty 69 70isEmpty(): boolean 71 72判断该HashSet是否为空。 73 74**系统能力:** SystemCapability.Utils.Lang 75 76**返回值:** 77 78| 类型 | 说明 | 79| -------- | -------- | 80| boolean | 为空返回true,不为空返回false。 | 81 82**错误码:** 83 84以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 85 86| 错误码ID | 错误信息 | 87| -------- | -------- | 88| 10200011 | The isEmpty method cannot be bound. | 89 90**示例:** 91 92```ts 93const hashSet: HashSet<number> = new HashSet(); 94let result = hashSet.isEmpty(); 95``` 96 97 98### has 99 100has(value: T): boolean 101 102判断此HashSet中是否含有该指定元素。 103 104**系统能力:** SystemCapability.Utils.Lang 105 106**参数:** 107 108| 参数名 | 类型 | 必填 | 说明 | 109| -------- | -------- | -------- | -------- | 110| value | T | 是 | 指定元素。 | 111 112**返回值:** 113 114| 类型 | 说明 | 115| -------- | -------- | 116| boolean | 包含指定元素返回true,否则返回false。 | 117 118**错误码:** 119 120以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 121 122| 错误码ID | 错误信息 | 123| -------- | -------- | 124| 10200011 | The has method cannot be bound. | 125 126**示例:** 127 128```ts 129let hashSet: HashSet<string> = new HashSet(); 130hashSet.add("squirrel"); 131let result = hashSet.has("squirrel"); 132``` 133 134 135### add 136 137add(value: T): boolean 138 139向HashSet中添加数据。 140 141**系统能力:** SystemCapability.Utils.Lang 142 143**参数:** 144 145| 参数名 | 类型 | 必填 | 说明 | 146| -------- | -------- | -------- | -------- | 147| value | T | 是 | 添加成员数据。 | 148 149**返回值:** 150 151| 类型 | 说明 | 152| -------- | -------- | 153| boolean | 成功增加元素返回true,否则返回false。 | 154 155**错误码:** 156 157以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 158 159| 错误码ID | 错误信息 | 160| -------- | -------- | 161| 10200011 | The add method cannot be bound. | 162 163**示例:** 164 165```ts 166let hashSet: HashSet<string> = new HashSet(); 167let result = hashSet.add("squirrel"); 168``` 169 170 171### remove 172 173remove(value: T): boolean 174 175删除指定的元素。 176 177**系统能力:** SystemCapability.Utils.Lang 178 179**参数:** 180 181| 参数名 | 类型 | 必填 | 说明 | 182| -------- | -------- | -------- | -------- | 183| value | T | 是 | 指定删除的元素。 | 184 185**返回值:** 186 187| 类型 | 说明 | 188| -------- | -------- | 189| boolean | 成功删除指定元素返回true,否则返回false。 | 190 191**错误码:** 192 193以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 194 195| 错误码ID | 错误信息 | 196| -------- | -------- | 197| 10200011 | The remove method cannot be bound. | 198 199**示例:** 200 201```ts 202let hashSet: HashSet<string> = new HashSet(); 203hashSet.add("squirrel"); 204hashSet.add("sparrow"); 205let result = hashSet.remove("sparrow"); 206``` 207 208 209### clear 210 211clear(): void 212 213清除HashSet中的所有元素,并把length置为0。 214 215**系统能力:** SystemCapability.Utils.Lang 216 217**错误码:** 218 219以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 220 221| 错误码ID | 错误信息 | 222| -------- | -------- | 223| 10200011 | The clear method cannot be bound. | 224 225**示例:** 226 227```ts 228let hashSet: HashSet<string> = new HashSet(); 229hashSet.add("squirrel"); 230hashSet.add("sparrow"); 231hashSet.clear(); 232``` 233 234 235### values 236 237values(): IterableIterator<T> 238 239返回包含此映射中包含的键值的新迭代器对象。 240 241**系统能力:** SystemCapability.Utils.Lang 242 243**返回值:** 244 245| 类型 | 说明 | 246| -------- | -------- | 247| IterableIterator<T> | 返回一个迭代器。 | 248 249**错误码:** 250 251以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 252 253| 错误码ID | 错误信息 | 254| -------- | -------- | 255| 10200011 | The values method cannot be bound. | 256 257**示例:** 258 259```ts 260let hashSet: HashSet<string> = new HashSet(); 261hashSet.add("squirrel"); 262hashSet.add("sparrow"); 263let iter = hashSet.values(); 264let temp = iter.next(); 265while(!temp.done) { 266 console.log("value:" + temp.value); 267 temp = iter.next(); 268} 269``` 270 271 272### forEach 273 274forEach(callbackFn: (value?: T, key?: T, set?: HashSet<T>) => void, thisArg?: Object): void 275 276通过回调函数来遍历实例对象上的元素以及元素对应的下标。 277 278**系统能力:** SystemCapability.Utils.Lang 279 280**参数:** 281 282| 参数名 | 类型 | 必填 | 说明 | 283| -------- | -------- | -------- | -------- | 284| callbackFn | function | 是 | 回调函数。 | 285| thisArg | Object | 否 | callbackfn被调用时用作this值,默认值为当前实例对象。 | 286 287callbackfn的参数说明: 288| 参数名 | 类型 | 必填 | 说明 | 289| -------- | -------- | -------- | -------- | 290| value | T | 否 | 当前遍历到的元素键值对的值,默认值为首个键值对的值。 | 291| key | T | 否 | 当前遍历到的元素键值对的键(和value相同),默认值为首个键值对的键。 | 292| set | HashSet<T> | 否 | 当前调用forEach方法的实例对象,默认值为当前实例对象。 | 293 294**错误码:** 295 296以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 297 298| 错误码ID | 错误信息 | 299| -------- | -------- | 300| 10200011 | The forEach method cannot be bound. | 301 302**示例:** 303 304```ts 305let hashSet: HashSet<string> = new HashSet(); 306hashSet.add("sparrow"); 307hashSet.add("squirrel"); 308hashSet.forEach((value?: string, key?: string): void => { 309 console.log("value:" + value, "key:" + key); 310}); 311``` 312 313 314### entries 315entries(): IterableIterator<[T, T]> 316 317返回包含此映射中包含的键值对的新迭代器对象。 318 319**系统能力:** SystemCapability.Utils.Lang 320 321**返回值:** 322 323| 类型 | 说明 | 324| -------- | -------- | 325| IterableIterator<[T, T]> | 返回一个迭代器。 | 326 327**错误码:** 328 329以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 330 331| 错误码ID | 错误信息 | 332| -------- | -------- | 333| 10200011 | The entries method cannot be bound. | 334 335**示例:** 336 337```ts 338let hashSet: HashSet<string> = new HashSet(); 339hashSet.add("squirrel"); 340hashSet.add("sparrow"); 341let iter = hashSet.entries(); 342let temp: IteratorResult<[string, string]> = iter.next(); 343while(!temp.done) { 344 console.log("key:" + temp.value[0]); 345 console.log("value:" + temp.value[1]); 346 temp = iter.next(); 347} 348``` 349 350 351### [Symbol.iterator] 352 353[Symbol.iterator]\(): IterableIterator<T> 354 355返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 356 357**系统能力:** SystemCapability.Utils.Lang 358 359> **说明:** 360> 361> 本接口不支持在.ets文件中使用 362 363**返回值:** 364 365| 类型 | 说明 | 366| -------- | -------- | 367| IterableIterator<T> | 返回一个迭代器 | 368 369**错误码:** 370 371以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 372 373| 错误码ID | 错误信息 | 374| -------- | -------- | 375| 10200011 | The Symbol.iterator method cannot be bound. | 376 377**示例:** 378 379```ts 380let hashSet: HashSet<string> = new HashSet(); 381hashSet.add("squirrel"); 382hashSet.add("sparrow"); 383 384// 使用方法一: 385let val: Array<string> = Array.from(hashSet.values()) 386for (let item of val) { 387 console.log("value: " + item); 388} 389 390// 使用方法二: 391let iter = hashSet[Symbol.iterator](); 392let temp: IteratorResult<string> = iter.next(); 393while(!temp.done) { 394 console.log("value: " + temp.value); 395 temp = iter.next(); 396} 397```