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