1# 非线性容器HashSet 2 3> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 4> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 5 6HashSet基于[HashMap](js-apis-hashmap.md)实现。在HashSet中,只对value对象进行处理。 7 8HashSet和[TreeSet](js-apis-treeset.md)相比,HashSet中的数据无序存放,即存放元素的顺序和取出的顺序不一致,而TreeSet是有序存放。它们集合中的元素都不允许重复,但HashSet允许放入null值,TreeSet不允许。 9 10**推荐使用场景:** 可以利用HashSet不重复的特性,当需要不重复的集合或需要去重某个集合的时候使用。 11 12## 导入模块 13 14```ts 15import HashSet from '@ohos.util.HashSet'; 16``` 17 18## HashSet 19 20### 属性 21 22**系统能力:** SystemCapability.Utils.Lang 23 24| 名称 | 参数类型 | 可读 | 可写 | 说明 | 25| -------- | -------- | -------- | -------- | -------- | 26| length | number | 是 | 否 | HashSet的元素个数。 | 27 28 29### constructor 30 31constructor() 32 33HashSet的构造函数。 34 35**系统能力:** SystemCapability.Utils.Lang 36 37**示例:** 38 39```ts 40let hashSet = new HashSet(); 41``` 42 43 44### isEmpty 45 46isEmpty(): boolean 47 48判断该HashSet是否为空。 49 50**系统能力:** SystemCapability.Utils.Lang 51 52**返回值:** 53 54| 类型 | 说明 | 55| -------- | -------- | 56| boolean | 为空返回true,不为空返回false。 | 57 58**示例:** 59 60```ts 61const hashSet = new HashSet(); 62let result = hashSet.isEmpty(); 63``` 64 65 66### has 67 68has(value: T): boolean 69 70判断此HashSet中是否含有该指定元素。 71 72**系统能力:** SystemCapability.Utils.Lang 73 74**参数:** 75 76| 参数名 | 类型 | 必填 | 说明 | 77| -------- | -------- | -------- | -------- | 78| value | T | 是 | 指定元素。 | 79 80**返回值:** 81 82| 类型 | 说明 | 83| -------- | -------- | 84| boolean | 包含指定元素返回true,否则返回false。 | 85 86**示例:** 87 88```ts 89let hashSet = new HashSet(); 90let result = hashSet.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 91hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 92let result1 = hashSet.has("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 93``` 94 95 96### add 97 98add(value: T): boolean 99 100向HashSet中添加数据。 101 102**系统能力:** SystemCapability.Utils.Lang 103 104**参数:** 105 106| 参数名 | 类型 | 必填 | 说明 | 107| -------- | -------- | -------- | -------- | 108| value | T | 是 | 添加成员数据。 | 109 110**返回值:** 111 112| 类型 | 说明 | 113| -------- | -------- | 114| boolean | 成功增加元素返回true,否则返回false。 | 115 116**示例:** 117 118```ts 119let hashSet = new HashSet(); 120let result = hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 121``` 122 123 124### remove 125 126remove(value: T): boolean 127 128删除指定的元素。 129 130**系统能力:** SystemCapability.Utils.Lang 131 132**参数:** 133 134| 参数名 | 类型 | 必填 | 说明 | 135| -------- | -------- | -------- | -------- | 136| value | T | 是 | 指定删除的元素。 | 137 138**返回值:** 139 140| 类型 | 说明 | 141| -------- | -------- | 142| boolean | 成功删除指定元素返回true,否则返回false。 | 143 144**示例:** 145 146```ts 147let hashSet = new HashSet(); 148hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 149hashSet.add("sdfs"); 150let result = hashSet.remove("sdfs"); 151``` 152 153 154### clear 155 156clear(): void 157 158清除HashSet中的所有元素,并把length置为0。 159 160**系统能力:** SystemCapability.Utils.Lang 161 162**示例:** 163 164```ts 165let hashSet = new HashSet(); 166hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 167hashSet.add("sdfs"); 168hashSet.clear(); 169``` 170 171 172### values 173 174values(): IterableIterator<T> 175 176返回包含此映射中包含的键值的新迭代器对象。 177 178**系统能力:** SystemCapability.Utils.Lang 179 180**返回值:** 181 182| 类型 | 说明 | 183| -------- | -------- | 184| IterableIterator<T> | 返回一个迭代器。 | 185 186**示例:** 187 188```ts 189let hashSet = new HashSet(); 190hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 191hashSet.add("sdfs"); 192let iter = hashSet.values(); 193let temp = iter.next().value; 194while(temp != undefined) { 195 console.log("value:" + temp); 196 temp = iter.next().value; 197} 198``` 199 200 201### forEach 202 203forEach(callbackfn: (value?: T, key?: T, set?: HashSet<T>) => void, thisArg?: Object): void 204 205通过回调函数来遍历实例对象上的元素以及元素对应的下标。 206 207**系统能力:** SystemCapability.Utils.Lang 208 209**参数:** 210 211| 参数名 | 类型 | 必填 | 说明 | 212| -------- | -------- | -------- | -------- | 213| callbackfn | function | 是 | 回调函数。 | 214| thisArg | Object | 否 | callbackfn被调用时用作this值。 | 215 216callbackfn的参数说明: 217| 参数名 | 类型 | 必填 | 说明 | 218| -------- | -------- | -------- | -------- | 219| value | T | 否 | 当前遍历到的元素键值对的值。 | 220| key | T | 否 | 当前遍历到的元素键值对的值(和value相同)。 | 221| set | HashSet<T> | 否 | 当前调用forEach方法的实例对象。 | 222 223**示例:** 224 225```ts 226let hashSet = new HashSet(); 227hashSet.add("sdfs"); 228hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 229hashSet.forEach((value, key) => { 230 console.log("value:" + value, "key:" + key); 231}); 232``` 233 234 235### entries 236entries(): IterableIterator<[T, T]> 237 238返回包含此映射中包含的键值对的新迭代器对象。 239 240**系统能力:** SystemCapability.Utils.Lang 241 242**返回值:** 243 244| 类型 | 说明 | 245| -------- | -------- | 246| IterableIterator<[T, T]> | 返回一个迭代器。 | 247 248**示例:** 249 250```ts 251let hashSet = new HashSet(); 252hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 253hashSet.add("sdfs"); 254let iter = hashSet.entries(); 255let temp = iter.next().value; 256while(temp != undefined) { 257 console.log("key:" + temp[0]); 258 console.log("value:" + temp[1]); 259 temp = iter.next().value; 260} 261``` 262 263 264### [Symbol.iterator] 265 266[Symbol.iterator]\(): IterableIterator<T> 267 268返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 269 270**系统能力:** SystemCapability.Utils.Lang 271 272**返回值:** 273 274| 类型 | 说明 | 275| -------- | -------- | 276| IterableIterator<T> | 返回一个迭代器 | 277 278**示例:** 279 280```ts 281let hashSet = new HashSet(); 282hashSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 283hashSet.add("sdfs"); 284 285// 使用方法一: 286for (let item of hashSet) { 287 console.log("value: " + item); 288} 289 290// 使用方法二: 291let iter = hashSet[Symbol.iterator](); 292let temp = iter.next().value; 293while(temp != undefined) { 294 console.log("value: " + temp); 295 temp = iter.next().value; 296} 297```