1# 非线性容器TreeSet 2 3 4TreeSet基于[TreeMap](js-apis-treemap.md)实现,在TreeSet中,只对value对象进行处理。TreeSet可用于存储一系列值的集合,元素中value唯一且有序。 5 6TreeSet和[HashSet](js-apis-hashset.md)相比,HashSet中的数据无序存放,而TreeSet是有序存放。它们集合中的元素都不允许重复,但HashSet允许放入null值,TreeSet不允许。 7 8**推荐使用场景:** 一般需要存储有序集合的场景,可以使用TreeSet。 9 10> **说明:** 11> 12> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 13 14## 导入模块 15 16```ts 17import TreeSet from '@ohos.util.TreeSet'; 18``` 19 20## TreeSet 21 22### 属性 23 24**系统能力:** SystemCapability.Utils.Lang 25 26| 名称 | 参数类型 | 可读 | 可写 | 说明 | 27| -------- | -------- | -------- | -------- | -------- | 28| length | number | 是 | 否 | TreeSet的元素个数。 | 29 30 31### constructor 32 33constructor(comparator?:(firstValue: T, secondValue: T) => boolean) 34 35TreeSet的构造函数。 36 37**系统能力:** SystemCapability.Utils.Lang 38 39**参数:** 40 41| 参数名 | 类型 | 必填 | 说明 | 42| -------- | -------- | -------- | -------- | 43| comparator | function | 否 | 用户自定义的比较函数。 | 44 45**示例:** 46 47```ts 48let treeSet = new TreeSet(); 49``` 50 51 52### isEmpty 53 54isEmpty(): boolean 55 56判断该容器是否为空。 57 58**系统能力:** SystemCapability.Utils.Lang 59 60**返回值:** 61 62| 类型 | 说明 | 63| -------- | -------- | 64| boolean | 为空返回true,不为空返回false。 | 65 66**示例:** 67 68```ts 69const treeSet = new TreeSet(); 70let result = treeSet.isEmpty(); 71``` 72 73 74### has 75 76has(value: T): boolean 77 78判断此容器中是否含有该指定元素。 79 80**系统能力:** SystemCapability.Utils.Lang 81 82**参数:** 83 84| 参数名 | 类型 | 必填 | 说明 | 85| -------- | -------- | -------- | -------- | 86| value | T | 是 | 指定元素。 | 87 88**返回值:** 89 90| 类型 | 说明 | 91| -------- | -------- | 92| boolean | 包含指定元素返回true,否则返回false。 | 93 94**示例:** 95 96```ts 97let treeSet = new TreeSet(); 98treeSet.has(123); 99treeSet.add(123); 100let result1 = treeSet.has(123); 101``` 102 103 104### getFirstValue 105 106getFirstValue(): T 107 108获取容器中排序第一的数据。 109 110**系统能力:** SystemCapability.Utils.Lang 111 112**返回值:** 113 114| 类型 | 说明 | 115| -------- | -------- | 116| T | 返回排序第一的数据。 | 117 118**示例:** 119 120```ts 121let treeSet = new TreeSet(); 122treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 123treeSet.add("sdfs"); 124let result = treeSet.getFirstValue(); 125``` 126 127 128### getLastValue 129 130getLastValue(): T 131 132获取容器中排序最后的数据。 133 134**系统能力:** SystemCapability.Utils.Lang 135 136**返回值:** 137 138| 类型 | 说明 | 139| -------- | -------- | 140| T | 返回排序最后的数据。 | 141 142**示例:** 143 144```ts 145let treeSet = new TreeSet(); 146treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 147treeSet.add("sdfs"); 148let result = treeSet.getLastValue(); 149``` 150 151 152### add 153 154add(value: T): boolean 155 156向容器中添加一组数据。 157 158**系统能力:** SystemCapability.Utils.Lang 159 160**参数:** 161 162| 参数名 | 类型 | 必填 | 说明 | 163| -------- | -------- | -------- | -------- | 164| value | T | 是 | 添加的成员数据。 | 165 166**返回值:** 167 168| 类型 | 说明 | 169| -------- | -------- | 170| boolean | 成功添加新数据至容器返回true,否则返回false。 | 171 172**示例:** 173 174```ts 175let treeSet = new TreeSet(); 176let result = treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 177``` 178 179 180### remove 181 182remove(value: T): boolean 183 184删除指定的元素。 185 186**系统能力:** SystemCapability.Utils.Lang 187 188**参数:** 189 190| 参数名 | 类型 | 必填 | 说明 | 191| -------- | -------- | -------- | -------- | 192| value | T | 是 | 指定的元素。 | 193 194**返回值:** 195 196| 类型 | 说明 | 197| -------- | -------- | 198| boolean | 成功删除元素返回true,否则返回false。 | 199 200**示例:** 201 202```ts 203let treeSet = new TreeSet(); 204treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 205treeSet.add("sdfs"); 206let result = treeSet.remove("sdfs"); 207``` 208 209 210### getLowerValue 211 212getLowerValue(key: T): T 213 214获取容器中比传入元素排序靠前一位的元素。 215 216**系统能力:** SystemCapability.Utils.Lang 217 218**参数:** 219 220| 参数名 | 类型 | 必填 | 说明 | 221| -------- | -------- | -------- | -------- | 222| key | T | 是 | 对比的元素值。 | 223 224**返回值:** 225 226| 类型 | 说明 | 227| -------- | -------- | 228| T | 返回排序中对比元素前一位的数据。 | 229 230**示例:** 231 232```ts 233let treeSet = new TreeSet(); 234treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 235treeSet.add("sdfs"); 236treeSet.add("zdfgsd"); 237let result = treeSet.getLowerValue("sdfs"); 238``` 239 240 241### getHigherValue 242 243getHigherValue(key: T): T 244 245获取容器中比传入元素排序靠后一位的元素。 246 247**系统能力:** SystemCapability.Utils.Lang 248 249**参数:** 250 251| 参数名 | 类型 | 必填 | 说明 | 252| -------- | -------- | -------- | -------- | 253| key | T | 是 | 对比的元素。 | 254 255**返回值:** 256 257| 类型 | 说明 | 258| -------- | -------- | 259| T | 返回排序中传入元素后一位的数据。 | 260 261**示例:** 262 263```ts 264let treeSet = new TreeSet(); 265treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 266treeSet.add("sdfs"); 267treeSet.add("zdfgsd"); 268let result = treeSet.getHigherValue("sdfs"); 269``` 270 271 272### popFirst 273 274popFirst(): T 275 276删除容器中排序最前的数据。 277 278**系统能力:** SystemCapability.Utils.Lang 279 280**返回值:** 281 282| 类型 | 说明 | 283| -------- | -------- | 284| T | 返回删除的数据。 | 285 286**示例:** 287 288```ts 289let treeSet = new TreeSet(); 290treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 291treeSet.add("sdfs"); 292let result = treeSet.popFirst(); 293``` 294 295 296### popLast 297 298popLast(): T 299 300删除容器中排序最后的数据。 301 302**系统能力:** SystemCapability.Utils.Lang 303 304**返回值:** 305 306| 类型 | 说明 | 307| -------- | -------- | 308| T | 返回删除的数据。 | 309 310**示例:** 311 312```ts 313let treeSet = new TreeSet(); 314treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 315treeSet.add("sdfs"); 316let result = treeSet.popLast(); 317``` 318 319 320### clear 321 322clear(): void 323 324清除容器中的所有元素,并把length置为0。 325 326**系统能力:** SystemCapability.Utils.Lang 327 328**示例:** 329 330```ts 331let treeSet = new TreeSet(); 332treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 333treeSet.add("sdfs"); 334treeSet.clear(); 335``` 336 337 338### values 339 340values(): IterableIterator<T> 341 342返回包含此映射中键值对的新迭代器对象。 343 344**系统能力:** SystemCapability.Utils.Lang 345 346**返回值:** 347 348| 类型 | 说明 | 349| -------- | -------- | 350| IterableIterator<T> | 返回一个迭代器。 | 351 352**示例:** 353 354```ts 355let treeSet = new TreeSet(); 356treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 357treeSet.add("sdfs"); 358let iter = treeSet.values(); 359let temp = iter.next().value; 360while(temp != undefined) { 361 console.log("value:" + temp); 362 temp = iter.next().value; 363} 364``` 365 366 367### forEach 368 369forEach(callbackfn: (value?: T, key?: T, set?: TreeSet<T>) => void, thisArg?: Object): void 370 371通过回调函数来遍历实例对象上的元素以及元素对应的下标。 372 373**系统能力:** SystemCapability.Utils.Lang 374 375**参数:** 376 377| 参数名 | 类型 | 必填 | 说明 | 378| -------- | -------- | -------- | -------- | 379| callbackfn | function | 是 | 回调函数。 | 380| thisArg | Object | 否 | callbackfn被调用时用作this值。 | 381 382callbackfn的参数说明: 383| 参数名 | 类型 | 必填 | 说明 | 384| -------- | -------- | -------- | -------- | 385| value | T | 否 | 当前遍历到的value元素。 | 386| key | T | 否 | 当前遍历到的key元素。 | 387| set | TreeSet<T> | 否 | 当前调用forEach方法的实例对象。 | 388 389**示例:** 390 391```ts 392let treeSet = new TreeSet(); 393treeSet.add("sdfs"); 394treeSet.add("dfsghsf"); 395treeSet.forEach((value, key) => { 396 console.log("value:" + value, "key:" + key); 397}); 398``` 399 400 401### entries 402 403entries(): IterableIterator<[T, T]> 404 405返回包含此映射中键值对的新迭代器对象。 406 407**系统能力:** SystemCapability.Utils.Lang 408 409**返回值:** 410 411| 类型 | 说明 | 412| -------- | -------- | 413| IterableIterator<[T, T]> | 返回一个迭代器。 | 414 415**示例:** 416 417```ts 418let treeSet = new TreeSet(); 419treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 420treeSet.add("sdfs"); 421let iter = treeSet.entries(); 422let temp = iter.next().value; 423while(temp != undefined) { 424 console.log("key:" + temp[0]); 425 console.log("value:" + temp[1]); 426 temp = iter.next().value; 427} 428``` 429 430 431### [Symbol.iterator] 432 433[Symbol.iterator]\(): IterableIterator<T> 434 435返回一个迭代器,迭代器的每一项都是一个JavaScript对象,并返回该对象。 436 437**系统能力:** SystemCapability.Utils.Lang 438 439**返回值:** 440 441| 类型 | 说明 | 442| -------- | -------- | 443| IterableIterator<T> | 返回一个迭代器。 | 444 445**示例:** 446 447```ts 448let treeSet = new TreeSet(); 449treeSet.add("Ahfbrgrbgnutfodgorrogorgrogofdfdf"); 450treeSet.add("sdfs"); 451 452// 使用方法一: 453for (let item of treeSet) { 454 console.log("value:" + item); 455} 456 457// 使用方法二: 458let iter = treeSet[Symbol.iterator](); 459let temp = iter.next().value; 460while(temp != undefined) { 461 console.log("value:" + temp); 462 temp = iter.next().value; 463} 464```