1# @ohos.util.Vector (线性容器Vector) 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 9Vector是一种线性数据结构,底层基于数组实现。当Vector的内存用尽时,会自动分配更大的连续内存区,将原先的元素复制到新的内存区,并释放旧的内存区。使用Vector能够高效快速地访问元素。 10 11Vector和[ArrayList](js-apis-arraylist.md)相似,都是基于数组实现,但Vector提供了更多操作数组的接口。它们都可以动态调整容量,但Vector每次扩容增加1倍,ArrayList只扩容0.5倍。 12 13**推荐使用场景:** 当数据量大时,一般使用Vector来存取数据。 14 15文档中存在泛型的使用,涉及以下泛型标记符:<br> 16- T:Type,类 17 18> **说明:** 19> 20> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 21> 22> API version 9开始,该接口不再维护,推荐使用接口['@ohos.util.ArrayList'](js-apis-arraylist.md)。 23 24## 导入模块 25 26```ts 27import { Vector } from '@kit.ArkTS'; 28``` 29 30 31## Vector 32 33### 属性 34 35**系统能力:** SystemCapability.Utils.Lang 36 37| 名称 | 类型 | 只读 | 可选 | 说明 | 38| -------- | -------- | -------- | -------- | -------- | 39| length | number | 是 | 否 | Vector的元素个数。 | 40 41 42### constructor 43 44constructor() 45 46Vector的构造函数。 47 48**系统能力:** SystemCapability.Utils.Lang 49 50**示例:** 51 52```ts 53let vector : Vector<string | number | Array<number>> = new Vector(); 54``` 55 56 57### add 58 59add(element: T): boolean 60 61在Vector中尾部插入元素。 62 63**系统能力:** SystemCapability.Utils.Lang 64 65**参数:** 66 67| 参数名 | 类型 | 必填 | 说明 | 68| -------- | -------- | -------- | -------- | 69| element | T | 是 | 添加进去的元素。 | 70 71**返回值:** 72 73| 类型 | 说明 | 74| -------- | -------- | 75| boolean | 插入成功返回true,失败返回false。 | 76 77**示例:** 78 79```ts 80class C1 { 81 name: string = "" 82 age: string = "" 83} 84let vector : Vector<string | number | C1 | Array<number>> = new Vector(); 85let result = vector.add("a"); 86let result1 = vector.add(1); 87let b = [1, 2, 3]; 88let result2 = vector.add(b); 89let c: C1 = {name : "Jack", age : "13"}; 90let result3 = vector.add(c); 91``` 92 93### insert 94 95insert(element: T, index: number): void 96 97在长度范围内任意插入指定元素,并将其后续元素向右移动。 98 99**系统能力:** SystemCapability.Utils.Lang 100 101**参数:** 102 103| 参数名 | 类型 | 必填 | 说明 | 104| -------- | -------- | -------- | -------- | 105| element | T | 是 | 被插入的元素。 | 106| index | number | 是 | 被插入的位置索引。 | 107 108**示例:** 109 110```ts 111let vector : Vector<string | number | Object | Array<number>> = new Vector(); 112vector.insert("A", 0); 113vector.insert(0, 1); 114vector.insert(true, 2); 115``` 116 117### has 118 119has(element: T): boolean 120 121判断此Vector中是否含有该指定元素。 122 123**系统能力:** SystemCapability.Utils.Lang 124 125**参数:** 126 127| 参数名 | 类型 | 必填 | 说明 | 128| -------- | -------- | -------- | -------- | 129| element | T | 是 | 指定的元素。 | 130 131**返回值:** 132 133| 类型 | 说明 | 134| -------- | -------- | 135| boolean | 是否包含指定元素,true表示包含该元素,false表示不包含。 | 136 137**示例:** 138 139```ts 140let vector : Vector<string> = new Vector(); 141let result = vector.has("squirrel"); 142vector.add("squirrel"); 143let result1 = vector.has("squirrel"); 144``` 145 146### getIndexOf 147 148getIndexOf(element: T): number 149 150返回指定元素第一次出现时的下标值,查找失败返回-1。 151 152**系统能力:** SystemCapability.Utils.Lang 153 154**参数:** 155 156| 参数名 | 类型 | 必填 | 说明 | 157| -------- | -------- | -------- | -------- | 158| element | T | 是 | 指定的元素。 | 159 160**返回值:** 161 162| 类型 | 说明 | 163| -------- | -------- | 164| number | 返回指定元素第一次出现时的下标值,查找失败返回-1。 | 165 166**示例:** 167 168```ts 169let vector : Vector<number> = new Vector(); 170vector.add(2); 171vector.add(4); 172vector.add(5); 173vector.add(2); 174vector.add(1); 175vector.add(2); 176vector.add(4); 177let result = vector.getIndexOf(2); 178``` 179 180### getLastIndexOf 181 182getLastIndexOf(element: T): number 183 184返回指定元素最后一次出现时的下标值,查找失败返回-1。 185 186**系统能力:** SystemCapability.Utils.Lang 187 188**参数:** 189 190| 参数名 | 类型 | 必填 | 说明 | 191| -------- | -------- | -------- | -------- | 192| element | T | 是 | 指定元素。 | 193 194**返回值:** 195 196| 类型 | 说明 | 197| -------- | -------- | 198| number | 返回指定元素最后一次出现时的下标值,查找失败返回-1。 | 199 200**示例:** 201 202```ts 203let vector : Vector<number> = new Vector(); 204vector.add(2); 205vector.add(4); 206vector.add(5); 207vector.add(2); 208vector.add(1); 209vector.add(2); 210vector.add(4); 211let result = vector.getLastIndexOf(2); 212``` 213 214### removeByIndex 215 216removeByIndex(index: number): T 217 218根据元素的下标值查找元素,返回元素后将其删除,并将其后续元素向左移动。 219 220**系统能力:** SystemCapability.Utils.Lang 221 222**参数:** 223 224| 参数名 | 类型 | 必填 | 说明 | 225| -------- | -------- | -------- | -------- | 226| index | number | 是 | 指定元素的下标值。 | 227 228**返回值:** 229 230| 类型 | 说明 | 231| -------- | -------- | 232| T | 返回被删除的元素。数组为空时返回undefined,下标越界时抛出异常。 | 233 234**示例:** 235 236```ts 237let vector : Vector<number> = new Vector(); 238vector.add(2); 239vector.add(4); 240vector.add(5); 241vector.add(2); 242vector.add(4); 243let result = vector.removeByIndex(2); 244``` 245 246### remove 247 248remove(element: T): boolean 249 250删除查找到的第一个指定的元素。 251 252**系统能力:** SystemCapability.Utils.Lang 253 254**参数:** 255 256| 参数名 | 类型 | 必填 | 说明 | 257| -------- | -------- | -------- | -------- | 258| element | T | 是 | 指定元素。 | 259 260**返回值:** 261 262| 类型 | 说明 | 263| -------- | -------- | 264| boolean | 删除成功返回true,否则返回false。 | 265 266**示例:** 267 268```ts 269let vector : Vector<number> = new Vector(); 270vector.add(2); 271vector.add(4); 272vector.add(5); 273vector.add(4); 274let result = vector.remove(2); 275``` 276 277### removeByRange 278 279removeByRange(fromIndex: number, toIndex: number): void 280 281从一段范围内删除元素,包括起始值但不包括终止值。 282 283**系统能力:** SystemCapability.Utils.Lang 284 285**参数:** 286 287| 参数名 | 类型 | 必填 | 说明 | 288| -------- | -------- | -------- | -------- | 289| fromIndex | number | 是 | 起始下标。 | 290| toIndex | number | 是 | 终止下标。 | 291 292**示例:** 293 294```ts 295let vector : Vector<number> = new Vector(); 296vector.add(2); 297vector.add(4); 298vector.add(5); 299vector.add(4); 300vector.removeByRange(2,4); 301``` 302 303### replaceAllElements 304 305replaceAllElements(callbackFn: (value: T, index?: number, vector?: Vector<T>) => T, 306thisArg?: Object): void 307 308用户操作Vector中的元素,用操作后的元素替换原元素并返回操作后的元素。 309 310**系统能力:** SystemCapability.Utils.Lang 311 312**参数:** 313 314| 参数名 | 类型 | 必填 | 说明 | 315| -------- | -------- | -------- | -------- | 316| callbackFn | function | 是 | 回调函数。 | 317| thisArg | Object | 否 | callbackfn被调用时用作this值,默认值为当前实例对象。 | 318 319callbackfn的参数说明: 320 321| 参数名 | 类型 | 必填 | 说明 | 322| -------- | -------- | -------- | -------- | 323| value | T | 是 | 当前遍历到的元素。 | 324| index | number | 否 | 当前遍历到的下标值,默认值为0。 | 325| vector | Vector<T> | 否 | 当前调用replaceAllElements方法的实例对象,默认值为当前实例对象。 | 326 327**示例:** 328 329```ts 330let vector : Vector<number> = new Vector(); 331vector.add(2); 332vector.add(4); 333vector.add(5); 334vector.add(4); 335vector.replaceAllElements((value : number) : number => { 336 // 用户操作逻辑根据实际场景进行添加。 337 return value; 338}); 339``` 340 341### forEach 342 343forEach(callbackFn: (value: T, index?: number, vector?: Vector<T>) => void, 344thisArg?: Object): void 345 346通过回调函数来遍历Vector实例对象上的元素以及元素对应的下标。 347 348**系统能力:** SystemCapability.Utils.Lang 349 350**参数:** 351 352| 参数名 | 类型 | 必填 | 说明 | 353| -------- | -------- | -------- | -------- | 354| callbackFn | function | 是 | 回调函数。 | 355| thisArg | Object | 否 | callbackfn被调用时用作this值,默认值为当前实例对象。 | 356 357callbackfn的参数说明: 358 359| 参数名 | 类型 | 必填 | 说明 | 360| -------- | -------- | -------- | -------- | 361| value | T | 是 | 当前遍历到的元素。 | 362| index | number | 否 | 当前遍历到的下标值,默认值为0。 | 363| vector | Vector<T> | 否 | 当前调用forEach方法的实例对象,默认值为当前实例对象。 | 364 365**示例:** 366 367```ts 368let vector : Vector<number> = new Vector(); 369vector.add(2); 370vector.add(4); 371vector.add(5); 372vector.add(4); 373vector.forEach((value : number, index ?: number) : void => { 374 console.info("value:" + value, "index:" + index); 375}); 376``` 377 378### sort 379 380sort(comparator?: (firstValue: T, secondValue: T) => number): void 381 382对Vector中的元素进行一个排序操作。 383 384**系统能力:** SystemCapability.Utils.Lang 385 386**参数:** 387 388| 参数名 | 类型 | 必填 | 说明 | 389| -------- | -------- | -------- | -------- | 390| comparator | function | 否 | 回调函数,默认值为当前实例对象。 | 391 392comparator的参数说明: 393 394| 参数名 | 类型 | 必填 | 说明 | 395| -------- | -------- | -------- | -------- | 396| firstValue | T | 是 | 前一项元素。 | 397| secondValue | T | 是 | 后一项元素。 | 398 399**示例:** 400 401```ts 402let vector : Vector<number> = new Vector(); 403vector.add(2); 404vector.add(4); 405vector.add(5); 406vector.add(4); 407vector.sort((a: number, b: number) => a - b); 408vector.sort((a: number, b: number) => b - a); 409vector.sort(); 410``` 411 412### subVector 413 414subVector(fromIndex: number, toIndex: number): Vector<T> 415 416根据下标截取Vector中的一段元素,并返回这一段vector实例,包括起始值但不包括终止值。 417 418**系统能力:** SystemCapability.Utils.Lang 419 420**参数:** 421 422| 参数名 | 类型 | 必填 | 说明 | 423| -------- | -------- | -------- | -------- | 424| fromIndex | number | 是 | 起始下标。 | 425| toIndex | number | 是 | 终止下标。 | 426 427**返回值:** 428 429| 类型 | 说明 | 430| -------- | -------- | 431| Vector<T> | 返回Vector对象实例。 | 432 433**示例:** 434 435```ts 436let vector : Vector<number> = new Vector(); 437vector.add(2); 438vector.add(4); 439vector.add(5); 440vector.add(4); 441vector.add(6); 442vector.add(8); 443let result = vector.subVector(0,4); 444let result1 = vector.subVector(2,4); 445 446``` 447 448### clear 449 450clear(): void 451 452清除Vector中的所有元素,并把length置为0。 453 454**系统能力:** SystemCapability.Utils.Lang 455 456**示例:** 457 458```ts 459let vector : Vector<number> = new Vector(); 460vector.add(2); 461vector.add(4); 462vector.add(5); 463vector.add(4); 464vector.clear(); 465``` 466 467### clone 468 469clone(): Vector<T> 470 471克隆一个与Vector相同的实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。 472 473**系统能力:** SystemCapability.Utils.Lang 474 475**返回值:** 476 477| 类型 | 说明 | 478| -------- | -------- | 479| Vector<T> | 返回Vector对象实例。 | 480 481**示例:** 482 483```ts 484let vector : Vector<number> = new Vector(); 485vector.add(2); 486vector.add(4); 487vector.add(5); 488vector.add(4); 489let result = vector.clone(); 490``` 491 492### getCapacity 493 494getCapacity(): number 495 496获取当前实例的容量大小。 497 498**系统能力:** SystemCapability.Utils.Lang 499 500**返回值:** 501 502| 类型 | 说明 | 503| -------- | -------- | 504| number | 返回Vector的容量大小。 | 505 506**示例:** 507 508```ts 509let vector : Vector<number> = new Vector(); 510vector.add(2); 511vector.add(4); 512vector.add(5); 513vector.add(4); 514let result = vector.getCapacity(); 515``` 516 517### convertToArray 518 519convertToArray(): Array<T> 520 521把当前Vector实例转换成数组,并返回转换后的数组。 522 523**系统能力:** SystemCapability.Utils.Lang 524 525**返回值:** 526 527| 类型 | 说明 | 528| -------- | -------- | 529| Array<T> | 返回数组类型。 | 530 531**示例:** 532 533```ts 534let vector : Vector<number> = new Vector(); 535vector.add(2); 536vector.add(4); 537vector.add(5); 538vector.add(4); 539let result = vector.convertToArray(); 540``` 541 542### isEmpty 543 544isEmpty(): boolean 545 546判断该Vector是否为空。 547 548**系统能力:** SystemCapability.Utils.Lang 549 550**返回值:** 551 552| 类型 | 说明 | 553| -------- | -------- | 554| boolean | 为空返回true,否则返回false。 | 555 556**示例:** 557 558```ts 559let vector : Vector<number> = new Vector(); 560vector.add(2); 561vector.add(4); 562vector.add(5); 563vector.add(4); 564let result = vector.isEmpty(); 565``` 566 567### increaseCapacityTo 568 569increaseCapacityTo(newCapacity: number): void 570 571如果传入的新容量大于或等于Vector中的元素个数,将容量变更为新容量。 572 573**系统能力:** SystemCapability.Utils.Lang 574 575**参数:** 576 577| 参数名 | 类型 | 必填 | 说明 | 578| -------- | -------- | -------- | -------- | 579| newCapacity | number | 是 | 新容量。 | 580 581**示例:** 582 583```ts 584let vector : Vector<number> = new Vector(); 585vector.add(2); 586vector.add(4); 587vector.add(5); 588vector.add(4); 589vector.increaseCapacityTo(2); 590vector.increaseCapacityTo(12); 591``` 592 593### trimToCurrentLength 594 595trimToCurrentLength(): void 596 597把容量限制为当前的length大小。 598 599**系统能力:** SystemCapability.Utils.Lang 600 601**示例:** 602 603```ts 604let vector : Vector<number> = new Vector(); 605vector.add(2); 606vector.add(4); 607vector.add(5); 608vector.add(4); 609vector.trimToCurrentLength(); 610``` 611 612### toString 613 614toString(): string 615 616用","将Vector实例中的元素按顺序拼接成字符串。 617 618**系统能力:** SystemCapability.Utils.Lang 619 620**返回值:** 621 622| 类型 | 说明 | 623| -------- | -------- | 624| string | 返回对应的字符串。 | 625 626**示例:** 627 628```ts 629let vector : Vector<number> = new Vector(); 630vector.add(2); 631vector.add(4); 632vector.add(5); 633vector.add(4); 634let result = vector.toString(); 635``` 636 637### copyToArray 638 639copyToArray(array: Array<T>): void 640 641将Vector实例中的元素按照下标复制到指定数组。 642 643**系统能力:** SystemCapability.Utils.Lang 644 645**参数:** 646 647| 参数名 | 类型 | 必填 | 说明 | 648| -------- | -------- | -------- | -------- | 649| array | Array<T> | 是 | 指定数组。 | 650 651### getFirstElement 652 653getFirstElement(): T 654 655获取实例中的第一个元素。 656 657**系统能力:** SystemCapability.Utils.Lang 658 659**返回值:** 660 661| 类型 | 说明 | 662| -------- | -------- | 663| T | 返回第一个元素。 | 664 665**示例:** 666 667```ts 668let vector : Vector<number> = new Vector(); 669vector.add(2); 670vector.add(4); 671vector.add(5); 672vector.add(4); 673let result = vector.getFirstElement(); 674``` 675 676### getLastElement 677 678getLastElement(): T 679 680获取Vector实例中的最后一个元素。 681 682**系统能力:** SystemCapability.Utils.Lang 683 684**返回值:** 685 686| 类型 | 说明 | 687| -------- | -------- | 688| T | 返回最后一个元素。 | 689 690**示例:** 691 692```ts 693let vector : Vector<number> = new Vector(); 694vector.add(2); 695vector.add(4); 696vector.add(5); 697vector.add(4); 698let result = vector.getLastElement(); 699``` 700 701### getLastIndexFrom 702 703getLastIndexFrom(element: T, index: number): number 704 705从指定索引向后搜索,返回该元素的下标索引。 706 707**系统能力:** SystemCapability.Utils.Lang 708 709**参数:** 710 711| 参数名 | 类型 | 必填 | 说明 | 712| -------- | -------- | -------- | -------- | 713| element | T | 是 | 要查找的元素。 | 714| index | number | 是 | 从指定索引开始搜索。 | 715 716**返回值:** 717 718| 类型 | 说明 | 719| -------- | -------- | 720| number | 返回该元素的下标,如果查找失败,则返回-1。 | 721 722**示例:** 723 724```ts 725let vector : Vector<number> = new Vector(); 726vector.add(2); 727vector.add(4); 728vector.add(5); 729vector.add(4); 730let result = vector.getLastIndexFrom(4,3); 731``` 732 733### getIndexFrom 734 735getIndexFrom(element: T, index: number): number 736 737从指定索引向前搜索,返回该元素的下标索引。 738 739**系统能力:** SystemCapability.Utils.Lang 740 741**参数:** 742 743| 参数名 | 类型 | 必填 | 说明 | 744| -------- | -------- | -------- | -------- | 745| element | T | 是 | 要查找的元素。 | 746| index | number | 是 | 从指定索引开始搜索。 | 747 748**返回值:** 749 750| 类型 | 说明 | 751| -------- | -------- | 752| number | 返回该元素的下标,如果查找失败,则返回 -1。 | 753 754**示例:** 755 756```ts 757let vector : Vector<number> = new Vector(); 758vector.add(2); 759vector.add(4); 760vector.add(5); 761vector.add(4); 762let result = vector.getIndexFrom(4, 3); 763``` 764 765### setLength 766 767setLength(newSize: number): void 768 769设置Vector实例的元素个数。 770 771**系统能力:** SystemCapability.Utils.Lang 772 773**参数:** 774 775| 参数名 | 类型 | 必填 | 说明 | 776| -------- | -------- | -------- | -------- | 777| newSize | number | 是 | 设置的新长度。 | 778 779**示例:** 780 781```ts 782let vector : Vector<number> = new Vector(); 783vector.add(2); 784vector.add(4); 785vector.add(5); 786vector.add(4); 787vector.setLength(8); 788vector.setLength(2); 789``` 790 791### get 792 793get(index: number): T 794 795根据下标值获取Vector实例中的元素。 796 797**系统能力:** SystemCapability.Utils.Lang 798 799**参数:** 800 801 | 参数名 | 类型 | 必填 | 说明 | 802 | -------- | -------- | -------- | -------- | 803 | index | number | 是 | 查找的下标值。 | 804 805**返回值:** 806 807 | 类型 | 说明 | 808 | -------- | -------- | 809 | T | 返回获取到的元素。 | 810 811**示例:** 812 813```ts 814let vector : Vector<number> = new Vector(); 815vector.add(2); 816vector.add(4); 817vector.add(5); 818vector.add(4); 819let result = vector.get(2); 820``` 821 822### set 823 824set(index: number, element: T): T 825 826将此Vector中指定位置的元素替换为指定元素。 827 828**系统能力:** SystemCapability.Utils.Lang 829 830**参数:** 831 832| 参数名 | 类型 | 必填 | 说明 | 833| -------- | -------- | -------- | -------- | 834| index | number | 是 | 查找的下标值。 | 835| element | T | 是 | 用来替换的元素。 | 836 837**返回值:** 838 839 | 类型 | 说明 | 840 | -------- | -------- | 841 | T | 返回替换后的元素。 | 842 843### [Symbol.iterator] 844 845[Symbol.iterator]\(): IterableIterator<T> 846 847返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 848 849**系统能力:** SystemCapability.Utils.Lang 850 851**返回值:** 852| 类型 | 说明 | 853| -------- | -------- | 854| IterableIterator<T> | 返回一个迭代器。 | 855 856**示例:** 857 858```ts 859let vector : Vector<number> = new Vector(); 860vector.add(2); 861vector.add(4); 862vector.add(5); 863vector.add(4); 864// 使用方法一: 865let nums: Array<number> = vector.convertToArray() 866for (let item of nums) { 867 console.info("value:" + item); 868} 869 870// 使用方法二: 871let iter = vector[Symbol.iterator](); 872let temp: IteratorResult<number> = iter.next().value; 873while(temp != undefined) { 874 console.info("value:" + temp); 875 temp = iter.next().value; 876} 877```