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