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

List底层通过单向链表实现,每个节点有一个指向后一个元素的引用。当需要查询元素时,必须从头遍历,插入、删除效率高,查询效率低。List允许元素为null。

List和[LinkedList]相比,LinkedList是双向链表,可以快速地在头尾进行增删,而List是单向链表,无法双向操作。

推荐使用场景: 当需要频繁的插入删除时,推荐使用List高效操作。

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

  • T:Type,类

说明:

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

导入模块

复制代码
import List from '@ohos.util.List';

List

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

属性

系统能力: SystemCapability.Utils.Lang

名称 类型 可读 可写 说明
length number List的元素个数。

constructor

constructor()

List的构造函数。

系统能力: SystemCapability.Utils.Lang

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200012 The List's constructor cannot be directly invoked.

示例:

cpp 复制代码
let list = new List();

add

add(element: T): boolean

在List尾部插入元素。

系统能力: SystemCapability.Utils.Lang

参数:

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

返回值:

类型 说明
boolean 插入成功返回true,否则返回false。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The add method cannot be bound.

示例:

cpp 复制代码
let list = new List();
let result1 = list.add("a");
let result2 = list.add(1);
let b = [1, 2, 3];
let result3 = list.add(b);
let c = {name : "Dylon", age : "13"};
let result4 = list.add(c);
let result5 = list.add(false);

insert

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

在长度范围内任意位置插入指定元素。

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
element T 插入元素。
index number 插入的位置索引。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The insert method cannot be bound.
10200001 The value of index is out of range.

示例:

cpp 复制代码
let list = new List();
list.insert("A", 0);
list.insert(0, 1);
list.insert(true, 2);

has

has(element: T): boolean

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

系统能力: SystemCapability.Utils.Lang

参数:

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

返回值:

类型 说明
boolean 包含指定元素返回true,否则返回false。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The has method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add("squirrel");
let result = list.has("squirrel");

get

get(index: number): T

根据下标获取List中的元素。

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
index number 要查找的下标。

返回值:

类型 说明
T 根据下标查找到的元素。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The get method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(1);
list.add(2);
list.add(4);
let result = list.get(2);

getLastIndexOf

getLastIndexOf(element: T): number

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

系统能力: SystemCapability.Utils.Lang

参数:

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

返回值:

类型 说明
number 返回指定元素最后一次出现的下标值,没有找到返回-1。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The getLastIndexOf method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(1);
list.add(2);
list.add(4);
let result = list.getLastIndexOf(2);

getIndexOf

getIndexOf(element: T): number

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

系统能力: SystemCapability.Utils.Lang

参数:

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

返回值:

类型 说明
number 返回第一次找到指定元素的下标,没有找到返回-1。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The getIndexOf method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(1);
list.add(2);
list.add(4);
let result = list.getIndexOf(2);

equal

equal(obj: Object): boolean

比较指定对象与此List是否相等。

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
obj Object 用来比较的对象。

返回值:

类型 说明
boolean 如果对象与此列表相同返回true,否则返回false。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The equal method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
let obj = new List();
obj.add(2);
obj.add(4);
obj.add(5);
let result = list.equal(obj);

removeByIndex

removeByIndex(index: number): T

根据元素的下标值查找元素,并将其删除。

系统能力: SystemCapability.Utils.Lang

参数:

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

返回值:

类型 说明
T 返回被删除的元素。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The removeByIndex method cannot be bound.
10200001 The value of index is out of range.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(4);
let result = list.removeByIndex(2);

remove

remove(element: T): boolean

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

系统能力: SystemCapability.Utils.Lang

参数:

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

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The remove method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.remove(2);

replaceAllElements

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

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

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
callbackFn function 回调函数。
thisArg Object callbackfn被调用时用作this值。

callbackfn的参数说明:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The replaceAllElements method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.replaceAllElements((value) => {
  // 用户操作逻辑根据实际场景进行添加。
  return value;
});

forEach

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

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

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
callbackFn function 回调函数。
thisArg Object callbackfn被调用时用作this值。

callbackfn的参数说明:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The forEach method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.forEach((value, index) => {
    console.log("value:" + value, "index:" + index);
});

sort

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

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

系统能力: SystemCapability.Utils.Lang

参数:

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

comparator的参数说明:

参数名 类型 必填 说明
firstValue T 前一项元素。
secondValue T 后一项元素。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The sort method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.sort((a: number, b: number) => a - b); // 结果为升序排列
list.sort((a: number, b: number) => b - a); // 结果为降序排列

getSubList

getSubList(fromIndex: number, toIndex: number): List<T>

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

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
fromIndex number 起始下标。
toIndex number 终止下标。

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The getSubList method cannot be bound.
10200001 The value of fromIndex or toIndex is out of range.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.getSubList(1, 3);

clear

clear(): void

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

系统能力: SystemCapability.Utils.Lang

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The clear method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.clear();

set

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

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

系统能力: SystemCapability.Utils.Lang

参数:

参数名 类型 必填 说明
index number 查找的下标值。
element T 用来替换的元素。

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The set method cannot be bound.
10200001 The value of index is out of range.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.set(2, "b");

convertToArray

convertToArray(): Array<T>

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

系统能力: SystemCapability.Utils.Lang

返回值:

类型 说明
Array<T> 返回转换后的数组。

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The convertToArray method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.convertToArray();

isEmpty

isEmpty(): boolean

判断该List是否为空。

系统能力: SystemCapability.Utils.Lang

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The isEmpty method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.isEmpty();

getFirst

getFirst(): T

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

系统能力: SystemCapability.Utils.Lang

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The getFirst method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.getFirst();

getLast

getLast(): T

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

系统能力: SystemCapability.Utils.Lang

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The getLast method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
let result = list.getLast();

[Symbol.iterator]

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

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

系统能力: SystemCapability.Utils.Lang

返回值:

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

错误码:

以下错误码的详细介绍请参见语言基础类库错误码

错误码ID 错误信息
10200011 The Symbol.iterator method cannot be bound.

示例:

cpp 复制代码
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);

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

// 使用方法二:
let iter = list[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 万款的应用 。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

相关推荐
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
AORO_BEIDOU3 小时前
单北斗+鸿蒙系统+国产芯片,遨游防爆手机自主可控“三保险”
华为·智能手机·harmonyos
博览鸿蒙5 小时前
鸿蒙操作系统(HarmonyOS)的应用开发入门
华为·harmonyos
少年姜太公6 小时前
从零开始详解js中的this(下)
前端·javascript·程序员
凌虚6 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
小华同学ai11 小时前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
Damon小智12 小时前
HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别
华为·harmonyos
袁震1 天前
Android-Glide缓存机制
android·缓存·移动开发·glide
爱笑的眼睛111 天前
uniapp 极速上手鸿蒙开发
华为·uni-app·harmonyos
K.P1 天前
鸿蒙元服务从0到上架【第三篇】(第二招有捷径)
华为·harmonyos·鸿蒙系统