OpenHarmony语言基础类库【@ohos.util.Vector (线性容器Vector)】

本文详细介绍了鸿蒙OS中的Vector数据结构,包括其基于数组实现的特点、扩容机制、与ArrayList的区别,以及推荐的使用场景,还涵盖了泛型应用和相关开发接口。
摘要由CSDN通过智能技术生成

 Vector是一种线性数据结构,底层基于数组实现。当Vector的内存用尽时,会自动分配更大的连续内存区,将原先的元素复制到新的内存区,并释放旧的内存区。使用Vector能够高效快速地访问元素。

Vector和[ArrayList]相似,都是基于数组实现,但Vector提供了更多操作数组的接口。它们都可以动态调整容量,但Vector每次扩容增加1倍,ArrayList只扩容0.5倍。

推荐使用场景:  当数据量大时,一般使用Vector来存取数据。

文档中存在泛型的使用,涉及以下泛型标记符:

  • T:Type,类

说明:

本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

API version 9开始,该接口不再维护,推荐使用接口['@ohos.util.ArrayList']。

导入模块

import Vector from '@ohos.util.Vector';  

Vector

属性

系统能力:  SystemCapability.Utils.Lang

名称类型可读可写说明
lengthnumberVector的元素个数。

鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

constructor

constructor()

Vector的构造函数。

系统能力:  SystemCapability.Utils.Lang

示例:

let vector = new Vector();

add

add(element: T): boolean

在Vector中尾部插入元素。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT添加进去的元素。

返回值:

类型说明
boolean插入成功返回true,失败返回false。

示例:

let vector = new Vector();
let result = vector.add("a");
let result1 = vector.add(1);
let b = [1, 2, 3];
let result2 = vector.add(b);
let c = {name : "Dylon", age : "13"};
let result3 = vector.add(c);

insert

insert(element: T, index: number): void

在长度范围内任意插入指定元素,并将其后续元素向右移动。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT被插入的元素。
indexnumber被插入的位置索引。

示例:

let vector = new Vector();
vector.insert("A", 0);
vector.insert(0, 1);
vector.insert(true, 2);

has

has(element: T): boolean

判断此Vector中是否含有该指定元素。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT指定的元素。

返回值:

类型说明
boolean是否包含指定元素,true表示包含该元素,false表示不包含。

示例:

let vector = new Vector();
let result = vector.has("squirrel");
vector.add("squirrel");
let result1 = vector.has("squirrel");

getIndexOf

getIndexOf(element: T): number

返回指定元素第一次出现时的下标值,查找失败返回-1。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT指定的元素。

返回值:

类型说明
number返回指定元素第一次出现时的下标值,查找失败返回-1。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(2);
vector.add(1);
vector.add(2);
vector.add(4);
let result = vector.getIndexOf(2);

getLastIndexOf

getLastIndexOf(element: T): number

返回指定元素最后一次出现时的下标值,查找失败返回-1。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT指定元素。

返回值:

类型说明
number返回指定元素最后一次出现时的下标值,查找失败返回-1。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(2);
vector.add(1);
vector.add(2);
vector.add(4);
let result = vector.getLastIndexOf(2);

removeByIndex

removeByIndex(index: number): T

根据元素的下标值查找元素,返回元素后将其删除,并将其后续元素向左移动。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
indexnumber指定元素的下标值。

返回值:

类型说明
T返回被删除的元素。数组为空时返回undefined,下标越界时抛出异常。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(2);
vector.add(4);
let result = vector.removeByIndex(2);

remove

remove(element: T): boolean

删除查找到的第一个指定的元素。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT指定元素。

返回值:

类型说明
boolean删除成功返回true,否则返回false。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.remove(2);

removeByRange

removeByRange(fromIndex: number, toIndex: number): void

从一段范围内删除元素,包括起始值但不包括终止值。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
fromIndexnumber起始下标。
toIndexnumber终止下标。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.removeByRange(2,4);

replaceAllElements

replaceAllElements(callbackFn: (value: T, index?: number, vector?: Vector<T>) => T, thisArg?: Object): void

用户操作Vector中的元素,用操作后的元素替换原元素并返回操作后的元素。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
callbackFnfunction回调函数。
thisArgObjectcallbackfn被调用时用作this值。

callbackfn的参数说明:

参数名类型必填说明
valueT当前遍历到的元素。
indexnumber当前遍历到的下标值。
vectorVector<T>当前调用replaceAllElements方法的实例对象。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.replaceAllElements((value) => {
    // 用户操作逻辑根据实际场景进行添加。
    return value;
});

forEach

forEach(callbackFn: (value: T, index?: number, vector?: Vector<T>) => void, thisArg?: Object): void

通过回调函数来遍历Vector实例对象上的元素以及元素对应的下标。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
callbackFnfunction回调函数。
thisArgObjectcallbackfn被调用时用作this值。

callbackfn的参数说明:

参数名类型必填说明
valueT当前遍历到的元素。
indexnumber当前遍历到的下标值。
vectorVector<T>当前调用forEach方法的实例对象。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.forEach((value, index) => {
    console.log("value:" + value, "index:" + index);
});

sort

sort(comparator?: (firstValue: T, secondValue: T) => number): void

对Vector中的元素进行一个排序操作。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
comparatorfunction回调函数。

comparator的参数说明:

参数名类型必填说明
firstValueT前一项元素。
secondValueT后一项元素。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.sort((a: number, b: number) => a - b);
vector.sort((a: number, b: number) => b - a);
vector.sort();

subVector

subVector(fromIndex: number, toIndex: number): Vector<T>

根据下标截取Vector中的一段元素,并返回这一段vector实例,包括起始值但不包括终止值。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
fromIndexnumber起始下标。
toIndexnumber终止下标。

返回值:

类型说明
Vector<T>返回Vector对象实例。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.add(6);
vector.add(8);
let result = vector.subVector(0,4);
let result1 = vector.subVector(2,4);

clear

clear(): void

清除Vector中的所有元素,并把length置为0。

系统能力:  SystemCapability.Utils.Lang

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.clear();

clone

clone(): Vector<T>

克隆一个与Vector相同的实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
Vector<T>返回Vector对象实例。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.clone();

getCapacity

getCapacity(): number

获取当前实例的容量大小。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
number返回Vector的容量大小。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.getCapacity();

convertToArray

convertToArray(): Array<T>

把当前Vector实例转换成数组,并返回转换后的数组。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
Array<T>返回数组类型。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.convertToArray();

isEmpty

isEmpty(): boolean

判断该Vector是否为空。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
boolean为空返回true,否则返回false。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.isEmpty();

increaseCapacityTo

increaseCapacityTo(newCapacity: number): void

如果传入的新容量大于或等于Vector中的元素个数,将容量变更为新容量。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
newCapacitynumber新容量。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.increaseCapacityTo(2);
vector.increaseCapacityTo(12);

trimToCurrentLength

trimToCurrentLength(): void

把容量限制为当前的length大小。

系统能力:  SystemCapability.Utils.Lang

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.trimToCurrentLength();

toString

toString(): string

用","将Vector实例中的元素按顺序拼接成字符串。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
string返回对应的字符串。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.toString();

copyToArray

copyToArray(array: Array<T>): void

将Vector实例中的元素按照下标复制到指定数组。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
arrayArray<T>指定数组。

getFirstElement

getFirstElement(): T

获取实例中的第一个元素。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
T返回第一个元素。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.getFirstElement();

getLastElement

getLastElement(): T

获取Vector实例中的最后一个元素。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
T返回最后一个元素。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.getLastElement();

getLastIndexFrom

getLastIndexFrom(element: T, index: number): number

从指定索引向后搜索,返回该元素的下标索引。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT要查找的元素。
indexnumber从指定索引开始搜索。

返回值:

类型说明
number返回该元素的下标,如果查找失败,则返回-1。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.add("a");
let result = vector.getLastIndexFrom(4,3);

getIndexFrom

getIndexFrom(element: T, index: number): number

从指定索引向前搜索,返回该元素的下标索引。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
elementT要查找的元素。
indexnumber从指定索引开始搜索。

返回值:

类型说明
number返回该元素的下标,如果查找失败,则返回 -1。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.add("a");
let result = vector.getIndexFrom(4, 3);

setLength

setLength(newSize: number): void

设置Vector实例的元素个数。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
newSizenumber设置的新长度。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
vector.setLength(8);
vector.setLength(2);

get

get(index: number): T

根据下标值获取Vector实例中的元素。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
indexnumber查找的下标值。

返回值:

类型说明
T返回获取到的元素。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);
let result = vector.get(2);

set

set(index: number, element: T): T

将此Vector中指定位置的元素替换为指定元素。

系统能力:  SystemCapability.Utils.Lang

参数:

参数名类型必填说明
indexnumber查找的下标值。
elementT用来替换的元素。

返回值:

类型说明
T返回替换后的元素。

搜狗高速浏览器截图20240326151450.png

[Symbol.iterator]

[Symbol.iterator](): IterableIterator<T>

返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。

系统能力:  SystemCapability.Utils.Lang

返回值:

类型说明
IterableIterator<T>返回一个迭代器。

示例:

let vector = new Vector();
vector.add(2);
vector.add(4);
vector.add(5);
vector.add(4);

// 使用方法一:
for (let item of vector) { 
  console.log("value:" + item); 
} 

// 使用方法二:
let iter = vector[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
  console.log("value:" + temp);
  temp = iter.next().value;
}

最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

高清完整版请点击《鸿蒙NEXT星河版开发学习文档》

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

《鸿蒙 (OpenHarmony)开发学习视频》

图片

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》

  1. ArkTS语言

  2. 安装DevEco Studio

  3. 运用你的第一个ArkTS应用

  4. ArkUI声明式UI开发

  5. .……

图片

《鸿蒙开发进阶》

  1. Stage模型入门

  2. 网络管理

  3. 数据管理

  4. 电话服务

  5. 分布式应用开发

  6. 通知与窗口管理

  7. 多媒体技术

  8. 安全技能

  9. 任务管理

  10. WebGL

  11. 国际化开发

  12. 应用测试

  13. DFX面向未来设计

  14. 鸿蒙系统移植和裁剪定制

  15. ……

图片

《鸿蒙开发实战》

  1. ArkTS实践

  2. UIAbility应用

  3. 网络案例

  4. ……

图片

 获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值