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<K> 530 531返回包含此映射中包含的键的新迭代器对象。 532 533**系统能力:** SystemCapability.Utils.Lang 534 535**返回值:** 536 537| 类型 | 说明 | 538| -------- | -------- | 539| IterableIterator<K> | 返回一个迭代器。 | 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<V> 567 568返回包含此映射中键值的新迭代器对象。 569 570**系统能力:** SystemCapability.Utils.Lang 571 572**返回值:** 573 574| 类型 | 说明 | 575| -------- | -------- | 576| IterableIterator<V> | 返回一个迭代器。 | 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<[K, V]> 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```