1# @ohos.util.TreeSet (Nonlinear Container TreeSet) 2 3**TreeSet** is implemented based on **[TreeMap](js-apis-treemap.md)**. In **TreeSet**, only **value** objects are processed. **TreeSet** can be used to store values, each of which must be unique. 4 5**[HashSet](js-apis-hashset.md)** stores data in a random order, whereas **TreeSet** stores data in sorted order. Both of them allows only unique elements. However, null values are allowed in **HashSet**, but not allowed in **TreeSet**. 6 7Recommended use case: Use **TreeSet** when you need to store data in sorted order. 8 9This topic uses the following to identify the use of generics: 10 11- T: Type 12 13> **NOTE** 14> 15> The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version. 16 17## Modules to Import 18 19```ts 20import TreeSet from '@ohos.util.TreeSet'; 21``` 22 23## TreeSet 24 25### Attributes 26 27**System capability**: SystemCapability.Utils.Lang 28 29| Name| Type| Readable| Writable| Description| 30| -------- | -------- | -------- | -------- | -------- | 31| length | number | Yes| No| Number of elements in a tree set (called container later).| 32 33 34### constructor 35 36constructor(comparator?: (firstValue: T, secondValue: T) => boolean) 37 38A constructor used to create a **TreeSet** instance. 39 40**System capability**: SystemCapability.Utils.Lang 41 42**Parameters** 43 44| Name| Type| Mandatory| Description| 45| -------- | -------- | -------- | -------- | 46| comparator | function | No| Custom comparator.| 47 48**Error codes** 49 50For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 51 52| ID| Error Message| 53| -------- | -------- | 54| 10200012 | The TreeSet's constructor cannot be directly invoked. | 55 56**Example** 57 58```ts 59let treeSet = new TreeSet(); 60``` 61 62 63### isEmpty 64 65isEmpty(): boolean 66 67Checks whether this container is empty (contains no element). 68 69**System capability**: SystemCapability.Utils.Lang 70 71**Return value** 72 73| Type| Description| 74| -------- | -------- | 75| boolean | Returns **true** if the container is empty; returns **false** otherwise.| 76 77**Error codes** 78 79For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 80 81| ID| Error Message| 82| -------- | -------- | 83| 10200011 | The isEmpty method cannot be bound. | 84 85**Example** 86 87```ts 88const treeSet = new TreeSet(); 89let result = treeSet.isEmpty(); 90``` 91 92 93### has 94 95has(value: T): boolean 96 97Checks whether this container has the specified value. 98 99**System capability**: SystemCapability.Utils.Lang 100 101**Parameters** 102 103| Name| Type| Mandatory| Description| 104| -------- | -------- | -------- | -------- | 105| value | T | Yes| Target value.| 106 107**Return value** 108 109| Type| Description| 110| -------- | -------- | 111| boolean | Returns **true** if the specified value is contained; returns **false** otherwise.| 112 113**Error codes** 114 115For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 116 117| ID| Error Message| 118| -------- | -------- | 119| 10200011 | The has method cannot be bound. | 120 121**Example** 122 123```ts 124let treeSet = new TreeSet(); 125treeSet.has(123); 126treeSet.add(123); 127let result1 = treeSet.has(123); 128``` 129 130 131### getFirstValue 132 133getFirstValue(): T 134 135Obtains the value of the first element in this container. 136 137**System capability**: SystemCapability.Utils.Lang 138 139**Return value** 140 141| Type| Description| 142| -------- | -------- | 143| T | Value obtained.| 144 145**Error codes** 146 147For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 148 149| ID| Error Message| 150| -------- | -------- | 151| 10200011 | The getFirstValue method cannot be bound. | 152 153**Example** 154 155```ts 156let treeSet = new TreeSet(); 157treeSet.add("squirrel"); 158treeSet.add("sparrow"); 159let result = treeSet.getFirstValue(); 160``` 161 162 163### getLastValue 164 165getLastValue(): T 166 167Obtains the value of the last element in this container. 168 169**System capability**: SystemCapability.Utils.Lang 170 171**Return value** 172 173| Type| Description| 174| -------- | -------- | 175| T | Value obtained.| 176 177**Error codes** 178 179For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 180 181| ID| Error Message| 182| -------- | -------- | 183| 10200011 | The getLastValue method cannot be bound. | 184 185**Example** 186 187```ts 188let treeSet = new TreeSet(); 189treeSet.add("squirrel"); 190treeSet.add("sparrow"); 191let result = treeSet.getLastValue(); 192``` 193 194 195### add 196 197add(value: T): boolean 198 199Adds an element to this container. 200 201**System capability**: SystemCapability.Utils.Lang 202 203**Parameters** 204 205| Name| Type| Mandatory| Description| 206| -------- | -------- | -------- | -------- | 207| value | T | Yes| Target element.| 208 209**Return value** 210 211| Type| Description| 212| -------- | -------- | 213| boolean | Returns **true** if the element is added successfully; returns **false** otherwise.| 214 215**Error codes** 216 217For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 218 219| ID| Error Message| 220| -------- | -------- | 221| 10200011 | The add method cannot be bound. | 222 223**Example** 224 225```ts 226let treeSet = new TreeSet(); 227let result = treeSet.add("squirrel"); 228``` 229 230 231### remove 232 233remove(value: T): boolean 234 235Removes the element with the specified key from this container. 236 237**System capability**: SystemCapability.Utils.Lang 238 239**Parameters** 240 241| Name| Type| Mandatory| Description| 242| -------- | -------- | -------- | -------- | 243| value | T | Yes| Key of the target element.| 244 245**Return value** 246 247| Type| Description| 248| -------- | -------- | 249| boolean | Returns **true** if the element is removed successfully; returns **false** otherwise.| 250 251**Error codes** 252 253For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 254 255| ID| Error Message| 256| -------- | -------- | 257| 10200011 | The remove method cannot be bound. | 258 259**Example** 260 261```ts 262let treeSet = new TreeSet(); 263treeSet.add("squirrel"); 264treeSet.add("sparrow"); 265let result = treeSet.remove("sparrow"); 266``` 267 268 269### getLowerValue 270 271getLowerValue(key: T): T 272 273Obtains the value that is placed in front of the input key in this container. 274 275**System capability**: SystemCapability.Utils.Lang 276 277**Parameters** 278 279| Name| Type| Mandatory| Description| 280| -------- | -------- | -------- | -------- | 281| key | T | Yes| Input key.| 282 283**Return value** 284 285| Type| Description| 286| -------- | -------- | 287| T | Value obtained.| 288 289**Error codes** 290 291For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 292 293| ID| Error Message| 294| -------- | -------- | 295| 10200011 | The getLowerValue method cannot be bound. | 296 297**Example** 298 299```ts 300let treeSet = new TreeSet(); 301treeSet.add("squirrel"); 302treeSet.add("sparrow"); 303treeSet.add("gander"); 304let result = treeSet.getLowerValue("sparrow"); 305``` 306 307 308### getHigherValue 309 310getHigherValue(key: T): T 311 312Obtains the value that is placed next to the input key in this container. 313 314**System capability**: SystemCapability.Utils.Lang 315 316**Parameters** 317 318| Name| Type| Mandatory| Description| 319| -------- | -------- | -------- | -------- | 320| key | T | Yes| Input key.| 321 322**Return value** 323 324| Type| Description| 325| -------- | -------- | 326| T | Value obtained.| 327 328**Error codes** 329 330For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 331 332| ID| Error Message| 333| -------- | -------- | 334| 10200011 | The getHigherValue method cannot be bound. | 335 336**Example** 337 338```ts 339let treeSet = new TreeSet(); 340treeSet.add("squirrel"); 341treeSet.add("sparrow"); 342treeSet.add("gander"); 343let result = treeSet.getHigherValue("sparrow"); 344``` 345 346 347### popFirst 348 349popFirst(): T 350 351Removes the first element in this container. 352 353**System capability**: SystemCapability.Utils.Lang 354 355**Return value** 356 357| Type| Description| 358| -------- | -------- | 359| T | Element removed.| 360 361**Error codes** 362 363For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 364 365| ID| Error Message| 366| -------- | -------- | 367| 10200011 | The popFirst method cannot be bound. | 368 369**Example** 370 371```ts 372let treeSet = new TreeSet(); 373treeSet.add("squirrel"); 374treeSet.add("sparrow"); 375let result = treeSet.popFirst(); 376``` 377 378 379### popLast 380 381popLast(): T 382 383Removes the last element in this container. 384 385**System capability**: SystemCapability.Utils.Lang 386 387**Return value** 388 389| Type| Description| 390| -------- | -------- | 391| T | Element removed.| 392 393**Error codes** 394 395For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 396 397| ID| Error Message| 398| -------- | -------- | 399| 10200011 | The popLast method cannot be bound. | 400 401**Example** 402 403```ts 404let treeSet = new TreeSet(); 405treeSet.add("squirrel"); 406treeSet.add("sparrow"); 407let result = treeSet.popLast(); 408``` 409 410 411### clear 412 413clear(): void 414 415Clears this container and sets its length to **0**. 416 417**System capability**: SystemCapability.Utils.Lang 418 419**Error codes** 420 421For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 422 423| ID| Error Message| 424| -------- | -------- | 425| 10200011 | The clear method cannot be bound. | 426 427**Example** 428 429```ts 430let treeSet = new TreeSet(); 431treeSet.add("squirrel"); 432treeSet.add("sparrow"); 433treeSet.clear(); 434``` 435 436 437### values 438 439values(): IterableIterator<T> 440 441Obtains an iterator that contains all the values in this container. 442 443**System capability**: SystemCapability.Utils.Lang 444 445**Return value** 446 447| Type| Description| 448| -------- | -------- | 449| IterableIterator<T> | Iterator obtained.| 450 451**Error codes** 452 453For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 454 455| ID| Error Message| 456| -------- | -------- | 457| 10200011 | The values method cannot be bound. | 458 459**Example** 460 461```ts 462let treeSet = new TreeSet(); 463treeSet.add("squirrel"); 464treeSet.add("sparrow"); 465let iter = treeSet.values(); 466let temp = iter.next().value; 467while(temp != undefined) { 468 console.log("value:" + temp); 469 temp = iter.next().value; 470} 471``` 472 473 474### forEach 475 476forEach(callbackFn: (value?: T, key?: T, set?: TreeSet<T>) => void, thisArg?: Object): void 477 478Uses a callback to traverse the elements in this container and obtain their position indexes. 479 480**System capability**: SystemCapability.Utils.Lang 481 482**Parameters** 483 484| Name| Type| Mandatory| Description| 485| -------- | -------- | -------- | -------- | 486| callbackFn | function | Yes| Callback invoked to traverse the elements in the container.| 487| thisArg | Object | No| Value of **this** to use when **callbackFn** is invoked.| 488 489callbackfn 490| Name| Type| Mandatory| Description| 491| -------- | -------- | -------- | -------- | 492| value | T | No| Value of the element that is currently traversed.| 493| key | T | No| Key of the element that is currently traversed.| 494| set | TreeSet<T> | No| Instance that invokes the **forEach** method.| 495 496**Error codes** 497 498For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 499 500| ID| Error Message| 501| -------- | -------- | 502| 10200011 | The forEach method cannot be bound. | 503 504**Example** 505 506```ts 507let treeSet = new TreeSet(); 508treeSet.add("sparrow"); 509treeSet.add("gull"); 510treeSet.forEach((value, key) => { 511 console.log("value:" + value, "key:" + key); 512}); 513``` 514 515 516### entries 517 518entries(): IterableIterator<[T, T]> 519 520Obtains an iterator that contains all the elements in this container. 521 522**System capability**: SystemCapability.Utils.Lang 523 524**Return value** 525 526| Type| Description| 527| -------- | -------- | 528| IterableIterator<[T, T]> | Iterator obtained.| 529 530**Error codes** 531 532For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 533 534| ID| Error Message| 535| -------- | -------- | 536| 10200011 | The entries method cannot be bound. | 537 538**Example** 539 540```ts 541let treeSet = new TreeSet(); 542treeSet.add("squirrel"); 543treeSet.add("sparrow"); 544let iter = treeSet.entries(); 545let temp = iter.next().value; 546while(temp != undefined) { 547 console.log("key:" + temp[0]); 548 console.log("value:" + temp[1]); 549 temp = iter.next().value; 550} 551``` 552 553 554### [Symbol.iterator] 555 556[Symbol.iterator]\(): IterableIterator<T> 557 558Obtains an iterator, each item of which is a JavaScript object. 559 560**System capability**: SystemCapability.Utils.Lang 561 562**Return value** 563 564| Type| Description| 565| -------- | -------- | 566| IterableIterator<T> | Iterator obtained.| 567 568**Error codes** 569 570For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). 571 572| ID| Error Message| 573| -------- | -------- | 574| 10200011 | The Symbol.iterator method cannot be bound. | 575 576**Example** 577 578```ts 579let treeSet = new TreeSet(); 580treeSet.add("squirrel"); 581treeSet.add("sparrow"); 582 583// Method 1: 584for (let item of treeSet) { 585 console.log("value:" + item); 586} 587 588// Method 2: 589let iter = treeSet[Symbol.iterator](); 590let temp = iter.next().value; 591while(temp != undefined) { 592 console.log("value:" + temp); 593 temp = iter.next().value; 594} 595``` 596