• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.util.TreeMap (非线性容器TreeMap)
2
3TreeMap可用于存储具有关联关系的key-value键值对集合,存储元素中key值唯一,每个key对应一个value。
4
5TreeMap底层使用红黑树实现,可以利用二叉树特性快速查找键值对。key值有序存储,可以实现快速的插入和删除。
6
7TreeMap和[HashMap](js-apis-hashmap.md)相比,HashMap依据键的hashCode存取数据,访问速度较快。而TreeMap是有序存取,效率较低。
8
9**推荐使用场景:** 一般需要存储有序键值对的场景,可以使用TreeMap。
10
11文档中存在泛型的使用,涉及以下泛型标记符:
12
13- K:Key,键
14
15- V:Value,值
16
17> **说明:**
18>
19> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
20
21
22## 导入模块
23
24```ts
25import TreeMap from '@ohos.util.TreeMap';
26```
27
28## TreeMap
29
30### 属性
31
32**系统能力:** SystemCapability.Utils.Lang
33
34| 名称 | 类型 | 可读 | 可写 | 说明 |
35| -------- | -------- | -------- | -------- | -------- |
36| length | number | 是 | 否 | TreeMap的元素个数。 |
37
38
39### constructor
40
41constructor(comparator?:(firstValue: K, secondValue: K) => boolean)
42
43TreeMap的构造函数,支持通过比较函数对元素进行升序或降序排序。
44
45**系统能力:** SystemCapability.Utils.Lang
46
47**参数:**
48
49| 参数名 | 类型 | 必填 | 说明 |
50| -------- | -------- | -------- | -------- |
51| comparator | function | 否 | 用户自定义的比较函数,可通过比较关系对元素进行排序。默认值为hole(一个空白占位符),表示不提供比较函数。 |
52
53**错误码:**
54
55以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
56
57| 错误码ID | 错误信息 |
58| -------- | -------- |
59| 10200012 | The TreeMap's constructor cannot be directly invoked. |
60
61**示例:**
62
63```ts
64//构造函数
65let treeMap : TreeMap<number, number> = new TreeMap();
66```
67
68```ts
69//使用comparator firstValue < secondValue,表示期望结果为升序排序。反之firstValue > secondValue,表示为降序排序。
70let treeMap : TreeMap<string,string> = new TreeMap<string,string>((firstValue: string, secondValue: string) : boolean => {return firstValue > secondValue});
71treeMap.set("aa","3");
72treeMap.set("dd","1");
73treeMap.set("cc","2");
74treeMap.set("bb","4");
75let numbers = Array.from(treeMap.keys())
76for (let item of numbers) {
77  console.log("treeMap:" + item);
78}
79```
80
81```ts
82//当插入自定义类型时,则必须要提供比较函数。
83 class TestEntry{
84   public id: number = 0;
85 }
86 let ts1: TreeMap<TestEntry, string> = new TreeMap<TestEntry, string>((t1: TestEntry, t2: TestEntry): boolean => {return t1.id < t2.id;});
87 let entry1: TestEntry = {
88   id: 0
89 };
90 let entry2: TestEntry = {
91   id: 1
92 }
93 ts1.set(entry1, "0");
94 ts1.set(entry2, "1");
95 console.log("treeMap: ", ts1.length);
96
97```
98
99
100### isEmpty
101
102isEmpty(): boolean
103
104判断该容器是否为空。
105
106**系统能力:** SystemCapability.Utils.Lang
107
108**返回值:**
109
110| 类型 | 说明 |
111| -------- | -------- |
112| boolean | 为空返回true,否则返回false。 |
113
114**错误码:**
115
116以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
117
118| 错误码ID | 错误信息 |
119| -------- | -------- |
120| 10200011 | The isEmpty method cannot be bound. |
121
122**示例:**
123
124```ts
125let treeMap : TreeMap<number, number> = new TreeMap();
126let result = treeMap.isEmpty();
127```
128
129
130### hasKey
131
132hasKey(key: K): boolean
133
134判断此容器中是否含有该指定key。
135
136**系统能力:** SystemCapability.Utils.Lang
137
138**参数:**
139
140| 参数名 | 类型 | 必填 | 说明 |
141| -------- | -------- | -------- | -------- |
142| key | K | 是 | 指定key |
143
144**返回值:**
145
146| 类型 | 说明 |
147| -------- | -------- |
148| boolean | 包含指定key返回true,否则返回false。 |
149
150**错误码:**
151
152以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
153
154| 错误码ID | 错误信息 |
155| -------- | -------- |
156| 10200011 | The hasKey method cannot be bound. |
157
158**示例:**
159
160```ts
161let treeMap : TreeMap<string, number> = new TreeMap();
162treeMap.set("squirrel", 123);
163let result = treeMap.hasKey("squirrel");
164```
165
166
167### hasValue
168
169hasValue(value: V): boolean
170
171判断此容器中是否含有该指定value。
172
173**系统能力:** SystemCapability.Utils.Lang
174
175**参数:**
176
177| 参数名 | 类型 | 必填 | 说明 |
178| -------- | -------- | -------- | -------- |
179| value | V | 是 | 指定value。 |
180
181**返回值:**
182
183| 类型 | 说明 |
184| -------- | -------- |
185| boolean | 包含指定元素返回true,否则返回false。 |
186
187**错误码:**
188
189以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
190
191| 错误码ID | 错误信息 |
192| -------- | -------- |
193| 10200011 | The hasValue method cannot be bound. |
194
195**示例:**
196
197```ts
198let treeMap : TreeMap<string, number> = new TreeMap();
199treeMap.set("squirrel", 123);
200let result = treeMap.hasValue(123);
201```
202
203
204### get
205
206get(key: K): V
207
208获取指定key所对应的value,为空时返回undefined。
209
210**系统能力:** SystemCapability.Utils.Lang
211
212**参数:**
213
214| 参数名 | 类型 | 必填 | 说明 |
215| -------- | -------- | -------- | -------- |
216| key | K | 是 | 指定key。 |
217
218**返回值:**
219
220| 类型 | 说明 |
221| -------- | -------- |
222| V | 返回key映射的value值,为空时返回undefined。 |
223
224**错误码:**
225
226以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
227
228| 错误码ID | 错误信息 |
229| -------- | -------- |
230| 10200011 | The get method cannot be bound. |
231
232**示例:**
233
234```ts
235let treeMap : TreeMap<string, number> = new TreeMap();
236treeMap.set("squirrel", 123);
237treeMap.set("sparrow", 356);
238let result = treeMap.get("sparrow");
239```
240
241
242### getFirstKey
243
244getFirstKey(): K
245
246获取容器中排序第一的key,为空时返回undefined。
247
248**系统能力:** SystemCapability.Utils.Lang
249
250**返回值:**
251
252| 类型 | 说明 |
253| -------- | -------- |
254| K | 返回排序第一的key,为空时返回undefined。 |
255
256**错误码:**
257
258以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
259
260| 错误码ID | 错误信息 |
261| -------- | -------- |
262| 10200011 | The getFirstKey method cannot be bound. |
263
264**示例:**
265
266```ts
267let treeMap : TreeMap<string, number> = new TreeMap();
268treeMap.set("squirrel", 123);
269treeMap.set("sparrow", 356);
270let result = treeMap.getFirstKey();
271```
272
273
274### getLastKey
275
276getLastKey(): K
277
278获取容器中排序最后的key,为空时返回undefined。
279
280**系统能力:** SystemCapability.Utils.Lang
281
282**返回值:**
283
284| 类型 | 说明 |
285| -------- | -------- |
286| K | 返回排序最后的key,为空时返回undefined。 |
287
288**错误码:**
289
290以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
291
292| 错误码ID | 错误信息 |
293| -------- | -------- |
294| 10200011 | The getLastKey method cannot be bound. |
295
296**示例:**
297
298```ts
299let treeMap : TreeMap<string, number> = new TreeMap();
300treeMap.set("squirrel", 123);
301treeMap.set("sparrow", 356);
302let result = treeMap.getLastKey();
303```
304
305
306### setAll
307
308setAll(map: TreeMap<K, V>): void
309
310将一个TreeMap中的所有元素组添加到另一个TreeMap中。
311
312**系统能力:** SystemCapability.Utils.Lang
313
314**参数:**
315
316| 参数名 | 类型 | 必填 | 说明 |
317| -------- | -------- | -------- | -------- |
318| map | TreeMap<K, V> | 是 | 该map会添加到其调用setAll接口的map对象中。 |
319
320**错误码:**
321
322以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
323
324| 错误码ID | 错误信息 |
325| -------- | -------- |
326| 10200011 | The setAll method cannot be bound. |
327
328**示例:**
329
330```ts
331let treeMap : TreeMap<string, number> = new TreeMap();
332treeMap.set("squirrel", 123);
333treeMap.set("sparrow", 356);
334let map : TreeMap<string, number> = new TreeMap();
335map.set("demo", 12);
336map.setAll(treeMap); // 将treeMap中的所有元素添加到map中
337map.forEach((value ?: number, key ?: string) : void => {
338  console.log("value" + value, "key" + key); // 打印结果 12 demo、356 sparrow、123 squirrel
339})
340```
341
342
343### set
344
345set(key: K, value: V): Object
346
347向容器中添加或更新一组数据。
348
349**系统能力:** SystemCapability.Utils.Lang
350
351**参数:**
352
353| 参数名 | 类型 | 必填 | 说明 |
354| -------- | -------- | -------- | -------- |
355| key | K | 是 | 添加成员数据的键名。 |
356| value | V | 是 | 添加成员数据的值。 |
357
358**返回值:**
359
360| 类型 | 说明 |
361| -------- | -------- |
362| Object | 返回添加后的treeMap |
363
364**错误码:**
365
366以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
367
368| 错误码ID | 错误信息 |
369| -------- | -------- |
370| 10200011 | The set method cannot be bound. |
371
372**示例:**
373
374```ts
375let treeMap : TreeMap<string, number> = new TreeMap();
376treeMap.set("squirrel", 123);
377```
378
379
380### remove
381
382remove(key: K): V
383
384删除指定key对应的元素。
385
386**系统能力:** SystemCapability.Utils.Lang
387
388**参数:**
389
390| 参数名 | 类型 | 必填 | 说明 |
391| -------- | -------- | -------- | -------- |
392| key | K | 是 | 指定key。 |
393
394**返回值:**
395
396| 类型 | 说明 |
397| -------- | -------- |
398| V | 返回删除元素的值。 |
399
400**错误码:**
401
402以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
403
404| 错误码ID | 错误信息 |
405| -------- | -------- |
406| 10200011 | The remove method cannot be bound. |
407
408**示例:**
409
410```ts
411let treeMap : TreeMap<string, number> = new TreeMap();
412treeMap.set("squirrel", 123);
413treeMap.set("sparrow", 356);
414let result = treeMap.remove("sparrow");
415```
416
417
418### getLowerKey
419
420getLowerKey(key: K): K
421
422获取容器中等于key或者比传入key排序靠前一位的key,为空时返回undefined。
423
424**系统能力:** SystemCapability.Utils.Lang
425
426**参数:**
427
428| 参数名 | 类型 | 必填 | 说明 |
429| -------- | -------- | -------- | -------- |
430| key | K | 是 | 对比的key值。 |
431
432**返回值:**
433
434| 类型 | 说明 |
435| -------- | -------- |
436| K | 返回排序中key前一位的数据,为空时返回undefined。 |
437
438**错误码:**
439
440以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
441
442| 错误码ID | 错误信息 |
443| -------- | -------- |
444| 10200011 | The getLowerKey method cannot be bound. |
445
446**示例:**
447
448```ts
449let treeMap : TreeMap<string, number> = new TreeMap();
450treeMap.set("squirrel", 123);
451treeMap.set("sparrow", 356);
452treeMap.set("gander", 356);
453let result = treeMap.getLowerKey("sparrow");
454```
455
456
457### getHigherKey
458
459getHigherKey(key: K): K
460
461获取容器中等于key或者比传入key排序靠后一位的key,为空时返回undefined。
462
463**系统能力:** SystemCapability.Utils.Lang
464
465**参数:**
466
467| 参数名 | 类型 | 必填 | 说明 |
468| -------- | -------- | -------- | -------- |
469| key | K | 是 | 对比的key值。 |
470
471**返回值:**
472
473| 类型 | 说明 |
474| -------- | -------- |
475| K | 返回排序中key后一位的数据,为空时返回undefined。 |
476
477**错误码:**
478
479以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
480
481| 错误码ID | 错误信息 |
482| -------- | -------- |
483| 10200011 | The getHigherKey method cannot be bound. |
484
485**示例:**
486
487```ts
488let treeMap : TreeMap<string, number> = new TreeMap();
489treeMap.set("squirrel", 123);
490treeMap.set("sparrow", 356);
491treeMap.set("gander", 356);
492let result = treeMap.getHigherKey("sparrow");
493```
494
495### replace
496
497replace(key: K, newValue: V): boolean
498
499对容器中一组数据进行更新(替换)。
500
501**系统能力:** SystemCapability.Utils.Lang
502
503**参数:**
504
505| 参数名 | 类型 | 必填 | 说明 |
506| -------- | -------- | -------- | -------- |
507| key | K | 是 | 指定key。 |
508| newValue | V | 是 | 替换的元素。 |
509
510**返回值:**
511
512| 类型 | 说明 |
513| -------- | -------- |
514| boolean | 对指定key对应的元素替换成功返回true,否则返回false。 |
515
516**错误码:**
517
518以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
519
520| 错误码ID | 错误信息 |
521| -------- | -------- |
522| 10200011 | The replace method cannot be bound. |
523
524**示例:**
525
526```ts
527let treeMap : TreeMap<string, number> = new TreeMap();
528treeMap.set("sparrow", 123);
529let result = treeMap.replace("sparrow", 357);
530```
531
532
533### clear
534
535clear(): void
536
537清除容器中的所有元素,并把length置为0。
538
539**系统能力:** SystemCapability.Utils.Lang
540
541**错误码:**
542
543以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
544
545| 错误码ID | 错误信息 |
546| -------- | -------- |
547| 10200011 | The clear method cannot be bound. |
548
549**示例:**
550
551```ts
552let treeMap : TreeMap<string, number> = new TreeMap();
553treeMap.set("squirrel", 123);
554treeMap.set("sparrow", 356);
555treeMap.clear();
556```
557
558
559### keys
560
561keys(): IterableIterator&lt;K&gt;
562
563返回包含此映射中包含的键的新迭代器对象。
564
565**系统能力:** SystemCapability.Utils.Lang
566
567**返回值:**
568
569| 类型 | 说明 |
570| -------- | -------- |
571| IterableIterator&lt;K&gt; | 返回一个迭代器。 |
572
573**错误码:**
574
575以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
576
577| 错误码ID | 错误信息 |
578| -------- | -------- |
579| 10200011 | The keys method cannot be bound. |
580
581**示例:**
582
583```ts
584let treeMap : TreeMap<string, number> = new TreeMap();
585treeMap.set("squirrel", 123);
586treeMap.set("sparrow", 356);
587let it = treeMap.keys();
588let t: IteratorResult<string> = it.next();
589while(!t.done) {
590  console.log("TreeMap " + t.value);
591  t = it.next()
592}
593```
594
595
596### values
597
598values(): IterableIterator&lt;V&gt;
599
600返回包含此映射中键值的新迭代器对象。
601
602**系统能力:** SystemCapability.Utils.Lang
603
604**返回值:**
605
606| 类型 | 说明 |
607| -------- | -------- |
608| IterableIterator&lt;V&gt; | 返回一个迭代器。 |
609
610**错误码:**
611
612以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
613
614| 错误码ID | 错误信息 |
615| -------- | -------- |
616| 10200011 | The values method cannot be bound. |
617
618**示例:**
619
620```ts
621let treeMap : TreeMap<string, number> = new TreeMap();
622treeMap.set("squirrel", 123);
623treeMap.set("sparrow", 356);
624let it = treeMap.values();
625let t: IteratorResult<number> = it.next();
626while(!t.done) {
627  console.log("TreeMap" + t.value);
628  t = it.next()
629}
630```
631
632
633### forEach
634
635forEach(callbackFn: (value?: V, key?: K, map?: TreeMap<K, V>) => void, thisArg?: Object): void
636
637通过回调函数来遍历实例对象上的元素以及元素对应的下标。
638
639**系统能力:** SystemCapability.Utils.Lang
640
641**参数:**
642
643| 参数名 | 类型 | 必填 | 说明 |
644| -------- | -------- | -------- | -------- |
645| callbackFn | function | 是 | 回调函数。 |
646| thisArg | Object | 否 | callbackFn被调用时用作this值,默认值为当前实例对象。 |
647
648callbackFn的参数说明:
649| 参数名 | 类型 | 必填 | 说明 |
650| -------- | -------- | -------- | -------- |
651| value | V | 否 | 当前遍历到的元素键值对的值,默认值为首个键值对的值。 |
652| key | K | 否 | 当前遍历到的元素键值对的键,默认值为首个键值对的键。 |
653| map | TreeMap<K, V> | 否 | 当前调用forEach方法的实例对象,默认值为当前实例对象。 |
654
655**错误码:**
656
657以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
658
659| 错误码ID | 错误信息 |
660| -------- | -------- |
661| 10200011 | The forEach method cannot be bound. |
662
663**示例:**
664
665```ts
666let treeMap : TreeMap<string, number> = new TreeMap();
667treeMap.set("sparrow", 123);
668treeMap.set("gull", 357);
669treeMap.forEach((value ?: number, key ?: string) : void => {
670  console.log("value:" + value, "key:" + key);
671});
672```
673
674
675### entries
676
677entries(): IterableIterator<[K, V]>
678
679返回包含此映射中键值对的新迭代器对象。
680
681**系统能力:** SystemCapability.Utils.Lang
682
683**返回值:**
684
685| 类型 | 说明 |
686| -------- | -------- |
687| IterableIterator<[K, V]> | 返回一个迭代器。 |
688
689**错误码:**
690
691以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
692
693| 错误码ID | 错误信息 |
694| -------- | -------- |
695| 10200011 | The entries method cannot be bound. |
696
697**示例:**
698
699```ts
700let treeMap : TreeMap<string, number> = new TreeMap();
701treeMap.set("squirrel", 123);
702treeMap.set("sparrow", 356);
703let it = treeMap.entries();
704let t: IteratorResult<Object[]> = it.next();
705while(!t.done) {
706  console.log("TreeMap" + t.value);
707  t = it.next()
708}
709```
710
711
712### [Symbol.iterator]
713
714[Symbol.iterator]\(): IterableIterator&lt;[K, V]&gt;
715
716返回一个迭代器,迭代器的每一项都是一个JavaScript对象,并返回该对象。
717
718> **说明:**
719>
720> 本接口不支持在.ets文件中使用
721
722**系统能力:** SystemCapability.Utils.Lang
723
724**返回值:**
725| 类型 | 说明 |
726| -------- | -------- |
727| IterableIterator<[K, V]> | 返回一个迭代器。 |
728
729**错误码:**
730
731以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
732
733| 错误码ID | 错误信息 |
734| -------- | -------- |
735| 10200011 | The Symbol.iterator method cannot be bound. |
736
737**示例:**
738
739```ts
740let treeMap : TreeMap<string, number> = new TreeMap();
741treeMap.set("squirrel", 123);
742treeMap.set("sparrow", 356);
743
744// 使用方法一:
745let it = treeMap.entries();
746let t: IteratorResult<Object[]> = it.next();
747while(!t.done) {
748  console.log("TreeMap" + t.value);
749  t = it.next()
750}
751
752// 使用方法二:
753 let iter = treeMap[Symbol.iterator]();
754 let temp: IteratorResult<Object[]> = iter.next();
755 while(!temp.done) {
756   console.log("key:" + temp.value[0]);
757   console.log("value:" + temp.value[1]);
758   temp = iter.next();
759 }
760```