• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;T&gt;) => 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&lt;T&gt; | 否 | 当前调用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&lt;T&gt;) => 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&lt;T&gt; | 否 | 当前调用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&lt;T&gt;
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&lt;T&gt; | 返回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&lt;T&gt;
470
471克隆一个与Vector相同的实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。
472
473**系统能力:** SystemCapability.Utils.Lang
474
475**返回值:**
476
477| 类型 | 说明 |
478| -------- | -------- |
479| Vector&lt;T&gt; | 返回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&lt;T&gt;
520
521把当前Vector实例转换成数组,并返回转换后的数组。
522
523**系统能力:** SystemCapability.Utils.Lang
524
525**返回值:**
526
527| 类型 | 说明 |
528| -------- | -------- |
529| Array&lt;T&gt; | 返回数组类型。 |
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&lt;T&gt;): void
640
641将Vector实例中的元素按照下标复制到指定数组。
642
643**系统能力:** SystemCapability.Utils.Lang
644
645**参数:**
646
647| 参数名 | 类型 | 必填 | 说明 |
648| -------- | -------- | -------- | -------- |
649| array | Array&lt;T&gt; | 是 | 指定数组。 |
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&lt;T&gt;
846
847返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
848
849**系统能力:** SystemCapability.Utils.Lang
850
851**返回值:**
852| 类型 | 说明 |
853| -------- | -------- |
854| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
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```