线性容器实现能按程序拜访的数据结构,其底层次要通过数组实现,包含 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 的应用示例,包含导入模块、减少元素、拜访元素及批改等操作。示例代码如下所示:
// ArrayList
import 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]}`);
// Vector
import 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()}`); // 拜访元素
// Deque
import 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]}`);
// Stack
import 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}`);
// List
import 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)}`); // 拜访元素