• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;T&gt;) => 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&lt;T&gt; | 否 | 当前调用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&lt;T&gt;) => 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&lt;T&gt; | 否 | 当前调用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&lt;T&gt;
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&lt;T&gt; | 返回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&lt;T&gt;
461
462克隆一个与Vector相同的实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。
463
464**系统能力:** SystemCapability.Utils.Lang
465
466**返回值:**
467
468| 类型 | 说明 |
469| -------- | -------- |
470| Vector&lt;T&gt; | 返回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&lt;T&gt;
511
512把当前Vector实例转换成数组,并返回转换后的数组。
513
514**系统能力:** SystemCapability.Utils.Lang
515
516**返回值:**
517
518| 类型 | 说明 |
519| -------- | -------- |
520| Array&lt;T&gt; | 返回数组类型。 |
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&lt;T&gt;): void
631
632将Vector实例中的元素按照下标复制到指定数组。
633
634**系统能力:** SystemCapability.Utils.Lang
635
636**参数:**
637
638| 参数名 | 类型 | 必填 | 说明 |
639| -------- | -------- | -------- | -------- |
640| array | Array&lt;T&gt; | 是 | 指定数组。 |
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&lt;T&gt;
838
839返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
840
841**系统能力:** SystemCapability.Utils.Lang
842
843**返回值:**
844| 类型 | 说明 |
845| -------- | -------- |
846| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
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```