TreeSet基于TreeMap实现,在TreeSet中,只对value对象进行处理。TreeSet可用于存储一系列值的集合,元素中value唯一且有序。
TreeSet和HashSet相比,HashSet中的数据无序存放,而TreeSet是有序存放。它们集合中的元素都不允许重复,但HashSet允许放入null值,TreeSet不建议插入空值,可能会影响排序结果。
推荐使用场景: 一般需要存储有序集合的场景,可以使用TreeSet。
HarmonyOS 非线性容器TreeSet 的好处
- 有序性:
- TreeSet内部使用红黑树实现,确保元素按照自然顺序或指定的比较器顺序进行存储。
- 这种有序性使得TreeSet在需要按序访问元素时非常高效,例如获取最小、最大元素或进行有序遍历。
- 唯一性:
- TreeSet不允许存储重复的元素,这确保了集合中每个元素的唯一性。
- 在需要保证元素不重复的场景中,TreeSet是一个理想的选择。
- 高效的查找、插入和删除操作:
- TreeSet基于红黑树的实现使得这些操作的时间复杂度为O(log n)。
- 这意味着即使集合包含大量元素,TreeSet也能提供快速的操作性能。
- 支持自定义排序:
- TreeSet允许通过提供自定义的比较器来定义元素的排序规则。
- 这使得TreeSet在需要按照特定顺序存储和处理元素的场景中非常灵活。
- 易于使用:
- TreeSet提供了丰富的API接口,使得操作集合变得简单直观。
- 例如,可以使用
add()
方法添加元素,remove()
方法删除元素,contains()
方法检查元素是否存在等。- 内存管理:
- 虽然TreeSet不是专门用于内存管理的数据结构,但由于其内部实现了红黑树,因此在存储和访问元素时能够保持较高的内存效率。
- 这有助于减少内存浪费并提高应用程序的性能。
导入模块
import { TreeSet } from '@kit.ArkTS';
TreeSet
1.constructor
2.isEmpty
3.has
4.add
5.remove
TreeSet
名称 | 类型 | 可读 | 可写 | 说明 |
---|---|---|---|---|
length | number | 是 | 否 | TreeSet的元素个数。 |
1.constructor
constructor(comparator?: (firstValue: T, secondValue: T) => boolean)
TreeSet的构造函数,支持通过比较函数对元素进行升序或降序排序。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
comparator | function | 否 | 用户自定义的比较函数,可通过比较关系对元素进行排序。默认值为hole(一个空白占位符),表示不提供比较函数。 |
使用方式:
//默认构造
let treeSet : TreeSet<string | number | boolean | Object> = new TreeSet();
//使用comparator firstValue < secondValue,表示期望结果为升序排序。反之firstValue > secondValue,表示为降序排序。
let treeSet : TreeSet<string> = new TreeSet<string>((firstValue: string, secondValue: string) : boolean => {return firstValue < secondValue});
treeSet.add("a");
treeSet.add("c");
treeSet.add("d");
treeSet.add("b");
let numbers = Array.from(treeSet.values())
for (let item of numbers) {
console.log("TreeSet:" + item);
}
//当插入自定义类型时,则必须要提供比较函数。
class TestEntry{
public id: number = 0;
}
let ts1: TreeSet<TestEntry> = new TreeSet<TestEntry>((t1: TestEntry, t2: TestEntry): boolean => {return t1.id > t2.id;});
let entry1: TestEntry = {
id: 0
};
let entry2: TestEntry = {
id: 1
}
ts1.add(entry1);
ts1.add(entry2);
console.log("treeSet: ", ts1.length);
2.isEmpty
isEmpty(): boolean
判断该容器是否为空。
返回值:
类型 | 说明 |
---|---|
boolean | 为空返回true,不为空返回false。 |
使用方式:
const treeSet : TreeSet<string | number | boolean | Object> = new TreeSet();
let result = treeSet.isEmpty();
3.has
has(value: T): boolean
判断此容器中是否含有该指定元素。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | T | 是 | 指定元素。 |
返回值:
类型 | 说明 |
---|---|
boolean | 包含指定元素返回true,否则返回false。 |
使用方式:
let treeSet : TreeSet<number> = new TreeSet();
treeSet.add(123);
let result = treeSet.has(123);
4.add
add(value: T): boolean
向容器中添加一组数据。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | T | 是 | 添加的成员数据。 |
返回值:
类型 | 说明 |
---|---|
boolean | 成功添加新数据至容器返回true,否则返回false。 |
使用方式:
let treeSet : TreeSet<string> = new TreeSet();
let result = treeSet.add("squirrel");
5.remove
remove(value: T): boolean
删除指定的元素。
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
value | T | 是 | 指定的元素。 |
返回值:
类型 | 说明 |
---|---|
boolean | 成功删除元素返回true,否则返回false。 |
使用方式:
let treeSet : TreeSet<string> = new TreeSet();
treeSet.add("squirrel");
treeSet.add("sparrow");
let result = treeSet.remove("sparrow");
如需要其他方法 请参考官方文档
制作不易 点个关注再走吧。°(°¯᷄◠¯᷅°)°。