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