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<K> 595 596返回包含此映射中包含的键的新迭代器对象。 597 598**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 599 600**系统能力:** SystemCapability.Utils.Lang 601 602**返回值:** 603 604| 类型 | 说明 | 605| -------- | -------- | 606| IterableIterator<K> | 返回一个迭代器。 | 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<V> 634 635返回包含此映射中键值的新迭代器对象。 636 637**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 638 639**系统能力:** SystemCapability.Utils.Lang 640 641**返回值:** 642 643| 类型 | 说明 | 644| -------- | -------- | 645| IterableIterator<V> | 返回一个迭代器。 | 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<[K, V]> 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```