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<K> 637 638返回包含此映射中所有键的新迭代器对象。 639 640**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 641 642**系统能力:** SystemCapability.Utils.Lang 643 644**返回值:** 645 646| 类型 | 说明 | 647| -------- | -------- | 648| IterableIterator<K> | 返回一个迭代器。 | 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<V> 677 678返回包含此映射中键值的新迭代器对象。 679 680**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 681 682**系统能力:** SystemCapability.Utils.Lang 683 684**返回值:** 685 686| 类型 | 说明 | 687| -------- | -------- | 688| IterableIterator<V> | 返回一个迭代器。 | 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<[K, V]> 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```