# @ohos.util.TreeSet (Nonlinear Container TreeSet) **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. **[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**. Recommended use case: Use **TreeSet** when you need to store data in sorted order. This topic uses the following to identify the use of generics: - T: Type > **NOTE** > > 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. ## Modules to Import ```ts import TreeSet from '@ohos.util.TreeSet'; ``` ## TreeSet ### Attributes **System capability**: SystemCapability.Utils.Lang | Name| Type| Readable| Writable| Description| | -------- | -------- | -------- | -------- | -------- | | length | number | Yes| No| Number of elements in a tree set (called container later).| ### constructor constructor(comparator?: (firstValue: T, secondValue: T) => boolean) A constructor used to create a **TreeSet** instance. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | comparator | function | No| Custom comparator. The default value is **hole** (a blank placeholder), indicating that no comparator. is provided.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200012 | The TreeSet's constructor cannot be directly invoked. | **Example** ```ts let treeSet = new TreeSet(); ``` ### isEmpty isEmpty(): boolean Checks whether this container is empty (contains no element). **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | boolean | Returns **true** if the container is empty; returns **false** otherwise.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The isEmpty method cannot be bound. | **Example** ```ts const treeSet = new TreeSet(); let result = treeSet.isEmpty(); ``` ### has has(value: T): boolean Checks whether this container has the specified value. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | value | T | Yes| Target value.| **Return value** | Type| Description| | -------- | -------- | | boolean | Returns **true** if the specified value is contained; returns **false** otherwise.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The has method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add(123); let result = treeSet.has(123); ``` ### getFirstValue getFirstValue(): T Obtains the value of the first element in this container. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | T | Value obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The getFirstValue method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let result = treeSet.getFirstValue(); ``` ### getLastValue getLastValue(): T Obtains the value of the last element in this container. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | T | Value obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The getLastValue method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let result = treeSet.getLastValue(); ``` ### add add(value: T): boolean Adds an element to this container. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | value | T | Yes| Target element.| **Return value** | Type| Description| | -------- | -------- | | boolean | Returns **true** if the element is added successfully; returns **false** otherwise.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The add method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); let result = treeSet.add("squirrel"); ``` ### remove remove(value: T): boolean Removes the element with the specified key from this container. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | value | T | Yes| Key of the target element.| **Return value** | Type| Description| | -------- | -------- | | boolean | Returns **true** if the element is removed successfully; returns **false** otherwise.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The remove method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let result = treeSet.remove("sparrow"); ``` ### getLowerValue getLowerValue(key: T): T Obtains the value that is placed in front of the input key in this container. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | key | T | Yes| Input key.| **Return value** | Type| Description| | -------- | -------- | | T | Value obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The getLowerValue method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); treeSet.add("gander"); let result = treeSet.getLowerValue("sparrow"); ``` ### getHigherValue getHigherValue(key: T): T Obtains the value that is placed next to the input key in this container. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | key | T | Yes| Input key.| **Return value** | Type| Description| | -------- | -------- | | T | Value obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The getHigherValue method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); treeSet.add("gander"); let result = treeSet.getHigherValue("sparrow"); ``` ### popFirst popFirst(): T Removes the first element in this container. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | T | Element removed.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The popFirst method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let result = treeSet.popFirst(); ``` ### popLast popLast(): T Removes the last element in this container. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | T | Element removed.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The popLast method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let result = treeSet.popLast(); ``` ### clear clear(): void Clears this container and sets its length to **0**. **System capability**: SystemCapability.Utils.Lang **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The clear method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); treeSet.clear(); ``` ### values values(): IterableIterator<T> Obtains an iterator that contains all the values in this container. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | IterableIterator<T> | Iterator obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The values method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let iter = treeSet.values(); let temp = iter.next().value; while(temp != undefined) { console.log("value:" + temp); temp = iter.next().value; } ``` ### forEach forEach(callbackFn: (value?: T, key?: T, set?: TreeSet<T>) => void, thisArg?: Object): void Uses a callback to traverse the elements in this container and obtain their position indexes. **System capability**: SystemCapability.Utils.Lang **Parameters** | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | callbackFn | function | Yes| Callback invoked to traverse the elements in the container.| | thisArg | Object | No| Value of **this** to use when **callbackFn** is invoked. The default value is this instance.| callbackFn | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | | value | T | No| Value of the element that is currently traversed. The default value is the value of the first key-value pair.| | key | T | No| Key of the element that is currently traversed. The default value is the key of the first key-value pair.| | set | TreeSet<T> | No| Instance that calls the **forEach** API. The default value is this instance.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The forEach method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("sparrow"); treeSet.add("gull"); treeSet.forEach((value, key) => { console.log("value:" + value, "key:" + key); }); ``` ### entries entries(): IterableIterator<[T, T]> Obtains an iterator that contains all the elements in this container. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | IterableIterator<[T, T]> | Iterator obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The entries method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); let iter = treeSet.entries(); let temp = iter.next().value; while(temp != undefined) { console.log("key:" + temp[0]); console.log("value:" + temp[1]); temp = iter.next().value; } ``` ### [Symbol.iterator] [Symbol.iterator]\(): IterableIterator<T> Obtains an iterator, each item of which is a JavaScript object. **System capability**: SystemCapability.Utils.Lang **Return value** | Type| Description| | -------- | -------- | | IterableIterator<T> | Iterator obtained.| **Error codes** For details about the error codes, see [Utils Error Codes](../errorcodes/errorcode-utils.md). | ID| Error Message| | -------- | -------- | | 10200011 | The Symbol.iterator method cannot be bound. | **Example** ```ts let treeSet = new TreeSet(); treeSet.add("squirrel"); treeSet.add("sparrow"); // Method 1: for (let item of treeSet) { console.log("value:" + item); } // Method 2: let iter = treeSet[Symbol.iterator](); let temp = iter.next().value; while(temp != undefined) { console.log("value:" + temp); temp = iter.next().value; } ```