• 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-treemap.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 | 否 | 用户自定义的比较函数。 |
52
53**错误码:**
54
55以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
56
57| 错误码ID | 错误信息 |
58| -------- | -------- |
59| 10200012 | The TreeMap's constructor cannot be directly invoked. |
60
61**示例:**
62
63```ts
64let treeMap = new TreeMap();
65```
66
67
68### isEmpty
69
70isEmpty(): boolean
71
72判断该容器是否为空。
73
74**系统能力:** SystemCapability.Utils.Lang
75
76**返回值:**
77
78| 类型 | 说明 |
79| -------- | -------- |
80| boolean | 为空返回true,否则返回false。 |
81
82**错误码:**
83
84以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
85
86| 错误码ID | 错误信息 |
87| -------- | -------- |
88| 10200011 | The isEmpty method cannot be bound. |
89
90**示例:**
91
92```ts
93const treeMap = new TreeMap();
94let result = treeMap.isEmpty();
95```
96
97
98### hasKey
99
100hasKey(key: K): boolean
101
102判断此容器中是否含有该指定key。
103
104**系统能力:** SystemCapability.Utils.Lang
105
106**参数:**
107
108| 参数名 | 类型 | 必填 | 说明 |
109| -------- | -------- | -------- | -------- |
110| key | K | 是 | 指定key |
111
112**返回值:**
113
114| 类型 | 说明 |
115| -------- | -------- |
116| boolean | 包含指定key返回true,否则返回false。 |
117
118**错误码:**
119
120以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
121
122| 错误码ID | 错误信息 |
123| -------- | -------- |
124| 10200011 | The hasKey method cannot be bound. |
125
126**示例:**
127
128```ts
129let treeMap = new TreeMap();
130treeMap.set("squirrel", 123);
131let result = treeMap.hasKey("squirrel");
132```
133
134
135### hasValue
136
137hasValue(value: V): boolean
138
139判断此容器中是否含有该指定value。
140
141**系统能力:** SystemCapability.Utils.Lang
142
143**参数:**
144
145| 参数名 | 类型 | 必填 | 说明 |
146| -------- | -------- | -------- | -------- |
147| value | V | 是 | 指定value。 |
148
149**返回值:**
150
151| 类型 | 说明 |
152| -------- | -------- |
153| boolean | 包含指定元素返回true,否则返回false。 |
154
155**错误码:**
156
157以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
158
159| 错误码ID | 错误信息 |
160| -------- | -------- |
161| 10200011 | The hasValue method cannot be bound. |
162
163**示例:**
164
165```ts
166let treeMap = new TreeMap();
167treeMap.set("squirrel", 123);
168let result = treeMap.hasValue(123);
169```
170
171
172### get
173
174get(key: K): V
175
176获取指定key所对应的value。
177
178**系统能力:** SystemCapability.Utils.Lang
179
180**参数:**
181
182| 参数名 | 类型 | 必填 | 说明 |
183| -------- | -------- | -------- | -------- |
184| key | K | 是 | 指定key。 |
185
186**返回值:**
187
188| 类型 | 说明 |
189| -------- | -------- |
190| V | 返回key映射的value值。 |
191
192**错误码:**
193
194以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
195
196| 错误码ID | 错误信息 |
197| -------- | -------- |
198| 10200011 | The get method cannot be bound. |
199
200**示例:**
201
202```ts
203let treeMap = new TreeMap();
204treeMap.set("squirrel", 123);
205treeMap.set("sparrow", 356);
206let result = treeMap.get("sparrow");
207```
208
209
210### getFirstKey
211
212getFirstKey(): K
213
214获取容器中排序第一的key。
215
216**系统能力:** SystemCapability.Utils.Lang
217
218**返回值:**
219
220| 类型 | 说明 |
221| -------- | -------- |
222| K | 返回排序第一的key。 |
223
224**错误码:**
225
226以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
227
228| 错误码ID | 错误信息 |
229| -------- | -------- |
230| 10200011 | The getFirstKey method cannot be bound. |
231
232**示例:**
233
234```ts
235let treeMap = new TreeMap();
236treeMap.set("squirrel", 123);
237treeMap.set("sparrow", 356);
238let result = treeMap.getFirstKey();
239```
240
241
242### getLastKey
243
244getLastKey(): K
245
246获取容器中排序最后的key。
247
248**系统能力:** SystemCapability.Utils.Lang
249
250**返回值:**
251
252| 类型 | 说明 |
253| -------- | -------- |
254| K | 返回排序最后的key |
255
256**错误码:**
257
258以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
259
260| 错误码ID | 错误信息 |
261| -------- | -------- |
262| 10200011 | The getLastKey method cannot be bound. |
263
264**示例:**
265
266```ts
267let treeMap = new TreeMap();
268treeMap.set("squirrel", 123);
269treeMap.set("sparrow", 356);
270let result = treeMap.getLastKey();
271```
272
273
274### setAll
275
276setAll(map: TreeMap<K, V>): void
277
278将一个TreeMap中的所有元素组添加到另一个TreeMap中。
279
280**系统能力:** SystemCapability.Utils.Lang
281
282**参数:**
283
284| 参数名 | 类型 | 必填 | 说明 |
285| -------- | -------- | -------- | -------- |
286| map | TreeMap<K, V> | 是 | 该map会添加到其调用setAll接口的map对象中。 |
287
288**错误码:**
289
290以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
291
292| 错误码ID | 错误信息 |
293| -------- | -------- |
294| 10200011 | The setAll method cannot be bound. |
295
296**示例:**
297
298```ts
299let treeMap = new TreeMap();
300treeMap.set("squirrel", 123);
301treeMap.set("sparrow", 356);
302let map = new TreeMap();
303map.set("demo", 12);
304map.setAll(treeMap); // 将treeMap中的所有元素添加到map中
305map.forEach((value, key) => {
306  console.log("value" + value, "key" + key); // 打印结果 12 demo、356 sparrow、123 squirrel
307})
308```
309
310
311### set
312
313set(key: K, value: V): Object
314
315向容器中添加一组数据。
316
317**系统能力:** SystemCapability.Utils.Lang
318
319**参数:**
320
321| 参数名 | 类型 | 必填 | 说明 |
322| -------- | -------- | -------- | -------- |
323| key | K | 是 | 添加成员数据的键名。 |
324| value | V | 是 | 添加成员数据的值。 |
325
326**返回值:**
327
328| 类型 | 说明 |
329| -------- | -------- |
330| Object | 返回添加后的treeMap |
331
332**错误码:**
333
334以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
335
336| 错误码ID | 错误信息 |
337| -------- | -------- |
338| 10200011 | The set method cannot be bound. |
339
340**示例:**
341
342```ts
343let treeMap = new TreeMap();
344treeMap.set("squirrel", 123);
345```
346
347
348### remove
349
350remove(key: K): V
351
352删除指定key对应的元素。
353
354**系统能力:** SystemCapability.Utils.Lang
355
356**参数:**
357
358| 参数名 | 类型 | 必填 | 说明 |
359| -------- | -------- | -------- | -------- |
360| key | K | 是 | 指定key。 |
361
362**返回值:**
363
364| 类型 | 说明 |
365| -------- | -------- |
366| V | 返回删除元素的值。 |
367
368**错误码:**
369
370以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
371
372| 错误码ID | 错误信息 |
373| -------- | -------- |
374| 10200011 | The remove method cannot be bound. |
375
376**示例:**
377
378```ts
379let treeMap = new TreeMap();
380treeMap.set("squirrel", 123);
381treeMap.set("sparrow", 356);
382let result = treeMap.remove("sparrow");
383```
384
385
386### getLowerKey
387
388getLowerKey(key: K): K
389
390获取容器中比传入key排序靠前一位的key。
391
392**系统能力:** SystemCapability.Utils.Lang
393
394**参数:**
395
396| 参数名 | 类型 | 必填 | 说明 |
397| -------- | -------- | -------- | -------- |
398| key | K | 是 | 对比的key值。 |
399
400**返回值:**
401
402| 类型 | 说明 |
403| -------- | -------- |
404| K | 返回排序中key前一位的数据。 |
405
406**错误码:**
407
408以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
409
410| 错误码ID | 错误信息 |
411| -------- | -------- |
412| 10200011 | The getLowerKey method cannot be bound. |
413
414**示例:**
415
416```ts
417let treeMap = new TreeMap();
418treeMap.set("squirrel", 123);
419treeMap.set("sparrow", 356);
420treeMap.set("gander", 356);
421let result = treeMap.getLowerKey("sparrow");
422```
423
424
425### getHigherKey
426
427getHigherKey(key: K): K
428
429获取容器中比传入key排序靠后一位的key。
430
431**系统能力:** SystemCapability.Utils.Lang
432
433**参数:**
434
435| 参数名 | 类型 | 必填 | 说明 |
436| -------- | -------- | -------- | -------- |
437| key | K | 是 | 对比的key值。 |
438
439**返回值:**
440
441| 类型 | 说明 |
442| -------- | -------- |
443| K | 返回排序中key后一位的数据。 |
444
445**错误码:**
446
447以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
448
449| 错误码ID | 错误信息 |
450| -------- | -------- |
451| 10200011 | The getHigherKey method cannot be bound. |
452
453**示例:**
454
455```ts
456let treeMap = new TreeMap();
457treeMap.set("squirrel", 123);
458treeMap.set("sparrow", 356);
459treeMap.set("gander", 356);
460let result = treeMap.getHigherKey("sparrow");
461```
462
463### replace
464
465replace(key: K, newValue: V): boolean
466
467对容器中一组数据进行更新(替换)。
468
469**系统能力:** SystemCapability.Utils.Lang
470
471**参数:**
472
473| 参数名 | 类型 | 必填 | 说明 |
474| -------- | -------- | -------- | -------- |
475| key | K | 是 | 指定key。 |
476| newValue | V | 是 | 替换的元素。 |
477
478**返回值:**
479
480| 类型 | 说明 |
481| -------- | -------- |
482| boolean | 对指定key对应的元素替换成功返回true,否则返回false。 |
483
484**错误码:**
485
486以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
487
488| 错误码ID | 错误信息 |
489| -------- | -------- |
490| 10200011 | The replace method cannot be bound. |
491
492**示例:**
493
494```ts
495let treeMap = new TreeMap();
496treeMap.set("sparrow", 123);
497let result = treeMap.replace("sparrow", 357);
498```
499
500
501### clear
502
503clear(): void
504
505清除容器中的所有元素,并把length置为0。
506
507**系统能力:** SystemCapability.Utils.Lang
508
509**错误码:**
510
511以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
512
513| 错误码ID | 错误信息 |
514| -------- | -------- |
515| 10200011 | The clear method cannot be bound. |
516
517**示例:**
518
519```ts
520let treeMap = new TreeMap();
521treeMap.set("squirrel", 123);
522treeMap.set("sparrow", 356);
523treeMap.clear();
524```
525
526
527### keys
528
529keys(): IterableIterator&lt;K&gt;
530
531返回包含此映射中包含的键的新迭代器对象。
532
533**系统能力:** SystemCapability.Utils.Lang
534
535**返回值:**
536
537| 类型 | 说明 |
538| -------- | -------- |
539| IterableIterator&lt;K&gt; | 返回一个迭代器。 |
540
541**错误码:**
542
543以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
544
545| 错误码ID | 错误信息 |
546| -------- | -------- |
547| 10200011 | The keys method cannot be bound. |
548
549**示例:**
550
551```ts
552let treeMap = new TreeMap();
553treeMap.set("squirrel", 123);
554treeMap.set("sparrow", 356);
555let iter = treeMap.keys();
556let temp = iter.next().value;
557while(temp != undefined) {
558  console.log("value:" + temp);
559  temp = iter.next().value;
560}
561```
562
563
564### values
565
566values(): IterableIterator&lt;V&gt;
567
568返回包含此映射中键值的新迭代器对象。
569
570**系统能力:** SystemCapability.Utils.Lang
571
572**返回值:**
573
574| 类型 | 说明 |
575| -------- | -------- |
576| IterableIterator&lt;V&gt; | 返回一个迭代器。 |
577
578**错误码:**
579
580以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
581
582| 错误码ID | 错误信息 |
583| -------- | -------- |
584| 10200011 | The values method cannot be bound. |
585
586**示例:**
587
588```ts
589let treeMap = new TreeMap();
590treeMap.set("squirrel", 123);
591treeMap.set("sparrow", 356);
592let iter = treeMap.values();
593let temp = iter.next().value;
594while(temp != undefined) {
595  console.log("value:" + temp);
596  temp = iter.next().value;
597}
598```
599
600
601### forEach
602
603forEach(callbackFn: (value?: V, key?: K, map?: TreeMap<K, V>) => void, thisArg?: Object): void
604
605通过回调函数来遍历实例对象上的元素以及元素对应的下标。
606
607**系统能力:** SystemCapability.Utils.Lang
608
609**参数:**
610
611| 参数名 | 类型 | 必填 | 说明 |
612| -------- | -------- | -------- | -------- |
613| callbackFn | function | 是 | 回调函数。 |
614| thisArg | Object | 否 | callbackFn被调用时用作this值。 |
615
616callbackFn的参数说明:
617| 参数名 | 类型 | 必填 | 说明 |
618| -------- | -------- | -------- | -------- |
619| value | V | 否 | 当前遍历到的元素键值对的值。 |
620| key | K | 否 | 当前遍历到的元素键值对的键。 |
621| map | TreeMap<K, V> | 否 | 当前调用forEach方法的实例对象。 |
622
623**错误码:**
624
625以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
626
627| 错误码ID | 错误信息 |
628| -------- | -------- |
629| 10200011 | The forEach method cannot be bound. |
630
631**示例:**
632
633```ts
634let treeMap = new TreeMap();
635treeMap.set("sparrow", 123);
636treeMap.set("gull", 357);
637treeMap.forEach((value, key) => {
638    console.log("value:" + value, "key:" + key);
639});
640```
641
642
643### entries
644
645entries(): IterableIterator<[K, V]>
646
647返回包含此映射中键值对的新迭代器对象。
648
649**系统能力:** SystemCapability.Utils.Lang
650
651**返回值:**
652
653| 类型 | 说明 |
654| -------- | -------- |
655| IterableIterator<[K, V]> | 返回一个迭代器。 |
656
657**错误码:**
658
659以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
660
661| 错误码ID | 错误信息 |
662| -------- | -------- |
663| 10200011 | The entries method cannot be bound. |
664
665**示例:**
666
667```ts
668let treeMap = new TreeMap();
669treeMap.set("squirrel", 123);
670treeMap.set("sparrow", 356);
671let iter = treeMap.entries();
672let temp = iter.next().value;
673while(temp != undefined) {
674  console.log("key:" + temp[0]);
675  console.log("value:" + temp[1]);
676  temp = iter.next().value;
677}
678```
679
680
681### [Symbol.iterator]
682
683[Symbol.iterator]\(): IterableIterator&lt;[K, V]&gt;
684
685返回一个迭代器,迭代器的每一项都是一个JavaScript对象,并返回该对象。
686
687**系统能力:** SystemCapability.Utils.Lang
688
689**返回值:**
690| 类型 | 说明 |
691| -------- | -------- |
692| IterableIterator<[K, V]> | 返回一个迭代器。 |
693
694**错误码:**
695
696以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
697
698| 错误码ID | 错误信息 |
699| -------- | -------- |
700| 10200011 | The Symbol.iterator method cannot be bound. |
701
702**示例:**
703
704```ts
705let treeMap = new TreeMap();
706treeMap.set("squirrel", 123);
707treeMap.set("sparrow", 356);
708
709// 使用方法一:
710for (let item of treeMap) {
711  console.log("key:" + item[0]);
712  console.log("value:" + item[1]);
713}
714
715// 使用方法二:
716let iter = treeMap[Symbol.iterator]();
717let temp = iter.next().value;
718while(temp != undefined) {
719  console.log("key:" + temp[0]);
720  console.log("value:" + temp[1]);
721  temp = iter.next().value;
722}
723```