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