• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;T&gt;
434
435返回一个迭代器,迭代器的每一项都是一个JavaScript对象,并返回该对象。
436
437**系统能力:** SystemCapability.Utils.Lang
438
439**返回值:**
440
441| 类型 | 说明 |
442| -------- | -------- |
443| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
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```