线性容器实现能按程序拜访的数据结构,其底层次要通过数组实现,包含 ArrayList、Vector、List、LinkedList、Deque、Queue、Stack 七种。

线性容器,充分考虑了数据拜访的速度,运行时(Runtime)通过一条字节码指令就能够实现增、删、改、查等操作。

ArrayList

ArrayList即动静数组,可用来结构全局的数组对象。 当须要频繁读取汇合中的元素时,举荐应用 ArrayList。

ArrayList 根据泛型定义,要求存储地位是一片间断的内存空间,初始容量大小为 10,并反对动静扩容,每次扩容大小为原始容量的 1.5 倍。

ArrayList 进行增、删、改、查操作的罕用 API 如下:

Vector

Vector是指间断存储构造,可用来结构全局的数组对象。Vector 根据泛型定义,要求存储地位是一片间断的内存空间,初始容量大小为 10,并反对动静扩容,每次扩容大小为原始容量的 2 倍。

Vector 和ArrayList类似,都是基于数组实现,但 Vector 提供了更多操作数组的接口。Vector 在反对操作符拜访的根底上,还减少了 get/set 接口,提供更为欠缺的校验及容错机制,满足用户不同场景下的需要。

API version 9 开始,该接口不再保护,举荐应用ArrayList。

Vector 进行增、删、改、查操作的罕用 API 如下:

List

List可用来结构一个单向链表对象,即只能通过头结点开始拜访到尾节点。List 根据泛型定义,在内存中的存储地位能够是不间断的。

List 和LinkedList相比,LinkedList 是双向链表,能够疾速地在头尾进行增删,而 List 是单向链表,无奈双向操作。

当须要频繁的插入删除时,举荐应用 List 高效操作。

能够通过 get/set 等接口对存储的元素进行批改,List 进行增、删、改、查操作的罕用 API 如下:

LinkedList

LinkedList可用来结构一个双向链表对象,能够在某一节点向前或者向后遍历 List。LinkedList 根据泛型定义,在内存中的存储地位能够是不间断的。

LinkedList 和List相比,LinkedList 是双向链表,能够疾速地在头尾进行增删,而 List 是单向链表,无奈双向操作。

LinkedList 和ArrayList相比,插入数据效率 LinkedList 优于 ArrayList,而查问效率 ArrayList 优于 LinkedList。

当须要频繁的插入删除时,举荐应用 LinkedList 高效操作。

能够通过 get/set 等接口对存储的元素进行批改,LinkedList 进行增、删、改、查操作的罕用 API 如下:

Deque

Deque可用来结构双端队列对象,存储元素遵循先进先出以及先进后出的规定,双端队列能够别离从队头或者队尾进行拜访。

Deque 根据泛型定义,要求存储地位是一片间断的内存空间,其初始容量大小为 8,并反对动静扩容,每次扩容大小为原始容量的 2 倍。Deque 底层采纳循环队列实现,入队及出队操作效率都比拟高。

Deque 和Queue相比,Queue 的特点是先进先出,只能在头部删除元素,尾部减少元素。

Deque 和Vector相比,它们都反对在两端增删元素,但 Deque 不能进行两头插入的操作。对头部元素的插入删除效率高于 Vector,而 Vector 拜访元素的效率高于 Deque。

须要频繁在汇合两端进行增删元素的操作时,举荐应用 Deque。

Deque 进行增、删、改、查操作的罕用 API 如下:

Queue

Queue可用来结构队列对象,存储元素遵循先进先出的规定。

Queue 根据泛型定义,要求存储地位是一片间断的内存空间,初始容量大小为 8,并反对动静扩容,每次扩容大小为原始容量的 2 倍。

Queue 底层采纳循环队列实现,入队及出队操作效率都比拟高。

Queue 和Deque相比,Queue 只能在一端删除一端减少,Deque 能够两端增删。

个别合乎先进先出的场景能够应用 Queue。

Queue 进行增、删、改、查操作的罕用 API 如下:

Stack

Stack可用来结构栈对象,存储元素遵循先进后出的规定。

Stack 根据泛型定义,要求存储地位是一片间断的内存空间,初始容量大小为 8,并反对动静扩容,每次扩容大小为原始容量的 1.5 倍。Stack 底层基于数组实现,入栈出栈均从数组的一端操作。

Stack 和Queue相比,Queue 基于循环队列实现,只能在一端删除,另一端插入,而 Stack 都在一端操作。

个别合乎先进后出的场景能够应用 Stack。

Stack 进行增、删、改、查操作的罕用 API 如下:

线性容器的应用

此处列举罕用的线性容器 ArrayList、Vector、Deque、Stack、List 的应用示例,包含导入模块、减少元素、拜访元素及批改等操作。示例代码如下所示:

// ArrayListimport ArrayList from '@ohos.util.ArrayList'; // 导入ArrayList模块let arrayList = new ArrayList();arrayList.add('a');arrayList.add(1); // 减少元素console.info(`result: ${arrayList[0]}`); // 拜访元素arrayList[0] = 'one'; // 批改元素console.info(`result: ${arrayList[0]}`);// Vectorimport Vector from '@ohos.util.Vector'; // 导入Vector模块let vector = new Vector();vector.add('a');let b1 = [1, 2, 3];vector.add(b1);vector.add(false); // 减少元素console.info(`result: ${vector[0]}`); // 拜访元素console.info(`result: ${vector.getFirstElement()}`); // 拜访元素// Dequeimport Deque from '@ohos.util.Deque'; // 导入Deque模块let deque = new Deque;deque.insertFront('a');deque.insertFront(1); // 减少元素console.info(`result: ${deque[0]}`); // 拜访元素deque[0] = 'one'; // 批改元素console.info(`result: ${deque[0]}`);// Stackimport Stack from '@ohos.util.Stack'; // 导入Stack模块 let stack = new Stack();stack.push('a');stack.push(1); // 减少元素console.info(`result: ${stack[0]}`); // 拜访元素stack.pop(); // 弹出元素console.info(`result: ${stack.length}`);// Listimport List from '@ohos.util.List'; // 导入List模块let list = new List;list.add('a');list.add(1);let b2 = [1, 2, 3];list.add(b2); // 减少元素console.info(`result: ${list[0]}`); // 拜访元素console.info(`result: ${list.get(0)}`); // 拜访元素