首页 > 其他分享 >鸿蒙HarmonyOS next开发容器类库使用

鸿蒙HarmonyOS next开发容器类库使用

时间:2024-10-29 10:49:35浏览次数:9  
标签:类库 删除 ArrayList 元素 next 链表 HarmonyOS Vector 节点

摘要

容器类库是指一组用于存储和管理数据的数据结构和算法。它们提供了各种不同类型的容器,如数组、链表、树、图等,以及相关的操作和功能,如查找、插入、删除、排序等。

一、容器类库

线性容器

1.ArrayList

ArrayList可以存储任意类型的对象,包括基本数据类型的包装类。

与普通数组相比,ArrayList的优势在于可以动态增加和缩减元素的数量,而不需要手动调整数组的大小。当需要添加或删除元素时,ArrayList会根据需要自动扩容或缩减。ArrayList依据泛型定义,要求存储位置是一片连续的内存空间,初始容量大小为10,并支持动态扩容,每次扩容大小为原始容量的1.5倍。

ArrayList提供了一系列方法用于操作集合中的元素,包括添加、删除、修改和查找等操作。可以使用get方法获取指定位置的元素,使用add方法在指定位置添加元素,使用remove方法删除指定位置的元素等等。

2.Vector

Vector和ArrayList在实现上确实相似,都是通过数组来存储元素,但有一些细微的差别。

  • 线程安全性:Vector是线程安全的,而ArrayList不是。因为Vector的方法都是同步的,可以在多线程环境下安全使用,但这也导致了Vector在性能上比ArrayList稍慢。
  • 动态扩容:Vector的扩容机制是每次扩容容量为原始容量的2倍,而ArrayList是每次扩容容量为原始容量的1.5倍。
  • 初始容量:Vector的初始容量大小为10,而ArrayList的初始容量为0。
  • 接口:Vector相比ArrayList提供了更多的操作数组的接口,如insertElementAt、removeElementAt等,这些接口可以更方便地在数组中插入、删除元素。

Vector在某些特定的场景下可能更适合使用,比如在多线程环境下或者需要频繁进行插入、删除元素的情况下。

3.List

List可以用来构造单向链表对象,每个节点包含一个数据元素和一个指向下一个节点的引用。链表中的节点在内存中可以是不连续的,因此可以灵活地进行插入和删除操作。

当需要频繁进行插入和删除操作时,使用List可以更高效地操作链表。因为插入和删除操作只需要改变节点的引用,而不需要移动其他节点。相比之下,如果使用数组或者其他连续内存的数据结构,插入和删除操作可能需要移动大量的元素,效率较低。

4.LinkedList

LinkedList是一种双向链表,每个节点除了储存数据外,还有两个指针分别指向前一个节点和后一个节点。这样的结构使得LinkedList可以快速地在头尾进行插入和删除操作,因为只需要改变相邻节点的指针即可,不需要像数组一样进行数据的搬移。

另外,LinkedList的内存存储位置可以是不连续的,这是因为每个节点只需要储存指向前后节点的指针,并不需要连续存储数据,所以在内存中的存储位置可以是不连续的。

相比之下,List接口代表一种有序的数据集合,可以包含重复的元素,但是没有提供快速的插入和删除操作。List的具体实现类,如ArrayList,底层实现是数组,而不是链表。虽然ArrayList在查询操作上效率更高,因为可以根据索引快速访问元素,但是插入和删除操作需要搬移后续元素,效率较低。

5.Deque

Deque是一种双端队列,它继承自Queue接口,提供了一些额外的方法来支持在队头和队尾进行添加和删除元素的操作。

addFirst(E e):在队头插入指定元素。
addLast(E e):在队尾插入指定元素。
removeFirst():移除并返回队头元素。
removeLast():移除并返回队尾元素。
getFirst():返回队头元素。
getLast():返回队尾元素。

6.Queue

Queue是一种具有先进先出(FIFO)特性的数据结构。它的实现可以通过数组或链表来完成。

在数组实现的Queue中,需要定义一个数组来保存元素,以及两个指针front和rear来分别指向队头和队尾。当元素入队时,rear指针向后移动,并将元素添加到rear指针所指向的位置;当元素出队时,front指针向后移动,将front指针所指向的元素删除。

在链表实现的Queue中,每个节点都有一个指针指向下一个节点,队头则是链表的第一个节点,队尾是链表的最后一个节点。元素入队时,将元素添加到链表的末尾;元素出队时,删除链表的第一个节点。

Queue的特性使得它在很多场景下都很有用,比如处理任务调度、消息队列、缓存等。实际上,很多编程语言都提供了Queue的实现,可以直接使用。

7.Stack

Stack类可以用来创建栈对象,该栈对象按照先进后出的规则存储元素。

Stack类基于泛型定义,要求存储位置需要是一片连续的内存空间,初始容量大小为8,并且支持动态扩容。每次扩容大小是原始容量的1.5倍。Stack类底层基于数组实现,入栈和出栈操作都是在数组的一端进行。

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

8.线性容器的使用
// 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)}`); // 访问元素

标签:类库,删除,ArrayList,元素,next,链表,HarmonyOS,Vector,节点
From: https://blog.csdn.net/csdn_wzq/article/details/143226453

相关文章

  • 鸿蒙NEXT应用上架与分发
    摘要HarmonyOS会通过数字证书与Profile文件等签名信息来保证应用的完整性,需要上架的HarmonyOS应用/元服务都必须通过签名校验,所以上架前,您需要先完成签名操作。一、生成密钥和证书请求文件1.打开DevEcoStudio,菜单选择“Build>GenerateKeyandCSR”。2.KeyStoreFile......
  • 多线程应用在鸿蒙 HarmonyOS Next 中的内存管理与 GC 实战
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在构建高性能应用时,尤其是需要处理大......
  • HarmonyOS Next:内存管理与 GC 基础
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言HarmonyOSNext作为华为自研的......
  • 在 HarmonyOS Next 中使用 Core File Kit 管理应用文件
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的文件管理技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在应用开发中,文件的创建、读......
  • 鸿蒙NEXT开发-应用数据持久化之用户首选项(基于最新api12稳定版)
    注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识专栏地址:https://blog.csdn.net/qq_56760790/category_12794123.html目录1.应用数据持久化2.应用数据持久......
  • KVM虚拟机下利用宝塔面板中的 Docker 配置 Nextcloud + onlyoffice
    第一部分:安装配置nextcloud准备(1)启动一个KVM虚拟机,见下图。该虚拟机为anlisos8…0.2虚拟机的ssh、hostname、IP地址都已配置好。(2)宝塔面板也已安装好docker一、环境docker版本:29.0.4DockerCompose版本:2.27.0mariadb-docker版本:10.6.17......
  • 【AI探索实践】使用Docker部署ChatGPT Next Web个人智能助手
    【AI探索实践】使用Docker部署ChatGPTNextWeb个人智能助手一、ChatGPTNextWeb介绍1.1ChatGPTNextWeb简介1.2主要特点1.3主要使用场景二、本次实践规划2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1检查Docker服务状态3.2检查Docker版本3.3检查doc......
  • HarmonyOS:应用/元服务上架
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18508754➤如果链接不是为敢技术的博客园地址,则可能是......
  • HarmonyOS:应用质量建议与测试指南(1)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18508627➤如果链接不是为敢技术的博客园地址,则可能是......
  • HarmonyOS SDK开放能力简介(2)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18508617➤如果链接不是为敢技术的博客园地址,则可能是......