鸿蒙开发-ArkTS语言-容器-非线性容器
鸿蒙开发-UI-web
鸿蒙开发-UI-web-页面
鸿蒙开发-ArkTS语言-基础类库
鸿蒙开发-ArkTS语言-并发
鸿蒙开发-ArkTS语言-并发-案例
鸿蒙开发-ArkTS语言-容器
文章目录
前言
一、非线性容器
1.HashMap
2.HashSet
3.TreeMap
4.TreeSet
5.LightWeightMap
6.LightWeightSet
7.PlainArray
二、非线性容器使用
总结
前言
上文详细学习鸿蒙开发ArkTS语言容器类库线性容器的特点以及常见操作的API,本文将学习非线性容器的相关知识。
一、非线性容器
非线性容器实现能快速查找的数据结构,其底层通过hash或者红黑树实现,包括HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray七种
1.HashMap
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过set(key: K, value: V)函数每次在HashMap增加一个键值对。 |
访问元素 | 通过get(key: K)获取key对应的value值。 |
通过keys()返回一个迭代器对象,包含map中的所有key值。 | |
通过values()返回一个迭代器对象,包含map中的所有value值。 | |
通过entries()返回一个迭代器对象,包含map中的所有键值对。 | |
forEach(callbackFn: (value?: V, key?: K, map?: HashMap<K, V>) => void, thisArg?: Object)访问整个map的元素。 | |
通过[Symbol.iterator]():IterableIterator<[K,V]>迭代器进行数据访问。 | |
修改元素 | 通过replace(key: K, newValue: V)对指定key对应的value值进行修改操作。 |
通过forEach(callbackFn: (value?: V, key?: K, map?: HashMap<K, V>) => void, thisArg?: Object)对map中元素进行修改操作。 | |
删除元素 | 通过remove(key: K)对map中匹配到的键值对进行删除操作。 |
通过clear()清空整个map集合。 |
2.HashSet
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过add(value: T)函数每次在HashSet增加一个值。 |
访问元素 | 通过values()返回一个迭代器对象,包含set中的所有value值。 |
通过entries()返回一个迭代器对象,包含类似键值对的数组,键值都是value。 | |
通过forEach(callbackFn: (value?: T, key?: T, set?: HashSet<T>) => void, thisArg?: Object)访问整个set的元素。 | |
通过[Symbol.iterator]():IterableIterator<T>迭代器进行数据访问。 | |
修改元素 | 通过forEach(callbackFn: (value?: T, key?: T, set?: HashSet<T>) => void, thisArg?: Object)对set中value进行修改操作。 |
删除元素 | 通过remove(value: T)对set中匹配到的值进行删除操作。 |
通过clear()清空整个set集合。 |
3.TreeMap
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过set(key: K,value: V)函数每次在TreeMap增加一个键值对。 |
访问元素 | 通过get(key: K)获取key对应的value值。 |
通过getFirstKey()获取map中排在首位的key值。 | |
通过getLastKey()获取map中排在未位的key值。 | |
通过keys()返回一个迭代器对象,包含map中的所有key值。 | |
通过values()返回一个迭代器对象,包含map中的所有value值。 | |
通过entries()返回一个迭代器对象,包含map中的所有键值对。 | |
通过forEach(callbackFn: (value?: V, key?: K, map?: TreeMap<K, V>) => void, thisArg?: Object)访问整个map的元素。 | |
通过[Symbol.iterator]():IterableIterator<[K,V]>迭代器进行数据访问。 | |
修改元素 | 通过replace(key: K,newValue: V)对指定key对应的value值进行修改操作。 |
通过forEach(callbackFn: (value?: V, key?: K, map?: TreeMap<K, V>) => void, thisArg?: Object)对map中元素进行修改操作。 | |
删除元素 | 通过remove(key: K)对map中匹配到的键值对进行删除操作。 |
通过clear()清空整个map集合。 |
4.TreeSet
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过add(value: T)函数每次在TreeSet增加一个值。 |
访问元素 | 通过values()返回一个迭代器对象,包含set中的所有value值。 |
通过entries()返回一个迭代器对象,包含类似键值对的数组,键值都是value。 | |
通过getFirstValue()获取set中排在首位的value值。 | |
通过getLastValue()获取set中排在未位的value值。 | |
通过forEach(callbackFn: (value?: T, key?: T, set?: TreeSet<T>) => void, thisArg?: Object)访问整个set的元素。 | |
通过[Symbol.iterator]():IterableIterator<T>迭代器进行数据访问。 | |
修改元素 | 通过forEach(callbackFn: (value?: T, key?: T, set?: TreeSet<T>) => void, thisArg?: Object)对set中value进行修改操作。 |
删除元素 | 通过remove(value: T)对set中匹配到的值进行删除操作。 |
通过clear()清空整个set集合。 |
5.LightWeightMap
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过set(key: K,value: V)函数每次在LightWeightMap增加一个键值对。 |
访问元素 | 通过get(key: K)获取key对应的value值。 |
通过getIndexOfKey(key: K)获取map中指定key的index。 | |
通过getIndexOfValue(value: V)获取map中指定value出现的第一个的index。 | |
通过keys()返回一个迭代器对象,包含map中的所有key值。 | |
通过values()返回一个迭代器对象,包含map中的所有value值。 | |
通过entries()返回一个迭代器对象,包含map中的所有键值对。 | |
通过getKeyAt(index: number)获取指定index对应的key值。 | |
通过getValueAt(index: number)获取指定index对应的value值。 | |
通过forEach(callbackFn: (value?: V, key?: K, map?: LightWeightMap<K, V>) => void, thisArg?: Object)访问整个map的元素。 | |
通过[Symbol.iterator]():IterableIterator<[K,V]>迭代器进行数据访问。 | |
修改元素 | 通过setValueAt(index: number, newValue: V)对指定index对应的value值进行修改操作。 |
通过forEach(callbackFn: (value?: V, key?: K, map?: LightWeightMap<K, V>) => void, thisArg?: Object)对map中元素进行修改操作。 | |
删除元素 | 通过remove(key: K)对map中匹配到的键值对进行删除操作。 |
通过removeAt(index: number)对map中指定index的位置进行删除操作。 | |
通过clear()清空整个map集合。 |
6.LightWeightSet
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过add(obj: T)函数每次在LightWeightSet增加一个值。 |
访问元素 | 通过getIndexOf(key: T)获取对应的index值。 |
通过values()返回一个迭代器对象,包含map中的所有value值。 | |
通过entries()返回一个迭代器对象,包含map中的所有键值对。 | |
通过getValueAt(index: number)获取指定index对应的value值。 | |
通过forEach(callbackFn: (value?: T, key?: T, set?: LightWeightSet<T>) => void, thisArg?: Object)访问整个set的元素。 | |
通过[Symbol.iterator]():IterableIterator<T>迭代器进行数据访问。 | |
修改元素 | 通过forEach(callbackFn: (value?: T, key?: T, set?: LightWeightSet<T>) => void, thisArg?: Object)对set中元素进行修改操作。 |
删除元素 | 通过remove(key: K)对set中匹配到的键值对进行删除操作。 |
通过removeAt(index: number)对set中指定index的位置进行删除操作。 | |
通过clear()清空整个set集合。 |
7.PlainArray
常用API如下:
操作 | 描述 |
---|---|
增加元素 | 通过add(key: number,value: T)函数每次在PlainArray增加一个键值对。 |
访问元素 | 通过get(key: number)获取key对应的value值。 |
通过getIndexOfKey(key: number)获取PlainArray中指定key的index。 | |
通过getIndexOfValue(value: T)获取PlainArray中指定value的index。 | |
通过getKeyAt(index: number)获取指定index对应的key值。 | |
通过getValueAt(index: number)获取指定index对应的value值。 | |
通过forEach(callbackFn: (value: T, index?: number, PlainArray?: PlainArray<T>) => void, thisArg?: Object)访问整个plainarray的元素。 | |
通过[Symbol.iterator]():IterableIterator<[number, T]>迭代器进行数据访问。 | |
修改元素 | 通过setValueAt(index:number, value: T)对指定index对应的value值进行修改操作。 |
通过forEach(callbackFn: (value: T, index?: number, PlainArray?: PlainArray<T>) => void, thisArg?: Object)对plainarray中元素进行修改操作。 | |
删除元素 | 通过remove(key: number)对plainarray中匹配到的键值对进行删除操作。 |
通过removeAt(index: number)对plainarray中指定index的位置进行删除操作。 | |
通过removeRangeFrom(index: number, size: number)对plainarray中指定范围内的元素进行删除操作。 | |
通过clear()清空整个PlainArray集合。 |
二、非线性容器使用
非线性容器HashMap、TreeMap、LightWeightMap、PlainArray的使用示例
总结
本文详细学习鸿蒙开发ArkTS语言容器类库非线性容器的特点以及常见操作的API,下文将学习XML生成、解析与转换相关知识。
相关文章:

鸿蒙开发-ArkTS语言-容器-非线性容器
鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 鸿蒙开发-ArkTS语言-并发 鸿蒙开发-ArkTS语言-并发-案例 鸿蒙开发-ArkTS语言-容器 文章目录 前言 一、非线性容器 1.HashMap 2.HashSet 3.TreeMap 4.TreeSet 5.LightWeightMap 6.LightWeightSet 7.P…...

【C语言】指针篇- 深度解析Sizeof和Strlen:热门面试题探究(5/5)
🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、简单介绍Sizeof和Strlen1.1 Sizeof1.2 Strlen函数1.3 Sie…...
【设计模式】单例模式的前世今生
文章目录 引言简介起航!向“确保某个类在系统中只有一个实例”进发 ⛵️Lazy SingletonDouble-checked locking(DCL) SingletonVolatile SingletonAtomic SingletonMeyers Singleton 附:C静态对象的初始化 引言 说起单例模式&…...
厦门网上在线教育系统,线下老师怎么转型到线上网上授课?
现在很多 线下老师都想转到线上做网课,但是在转线上过程中会出现很多问题,很多人都不知道怎么开始,今天小编和大家说一下要注意的。 一、你要有一套适合线上的教学视频 首先你要准备做的课程内容是什么,怎么讲,讲什么&…...

Spring底层入门(九)
boot的执行流程分为构造SpringApplication对象、调用run方法两部分 1、Spring Boot 执行流程-构造 通常我们会在SpringBoot的主启动类中写以下的代码: 参数一是当前类的字节码,参数二是main的args参数。 public class StartApplication {public static…...
掌握Android Fragment开发之魂:Fragment的深度解析(下)
在上一篇文章中,我们深入探讨了Fragment 通信,包含Fragment 向 Activity 传递数据、Activity 向 Fragment 传递数据、Fragment 之间的通信方式。感兴趣的朋友,请前往查阅: 掌握Android Fragment开发之魂:Fragment的深度…...

小巧简单实用的Linux端口转发工具Rinetd
Linux下实现端口转发有很多种方法,尤其是在可以联网的情况下,更是容易。最近在资源受限的定制系统中,找到一个方便离线安装和使用的端口转发工具Rinetd,安装包仅几十K,而且有很多版本的Linux发行系统的支持。 1、安装…...

HackBar 新手使用教程(入门)
啥是Hackbar? Hackbar是一个Firefox 的插件,它的功能类似于地址栏,但是它里面的数据不受服务器的相应触发的重定向等其它变化的影响。 有网址的载入于访问,联合查询,各种编码,数据加密功能。 这个Hackbar可以帮助你在测试SQL注入,XSS漏洞和网站的安全性,主要是帮助…...

<Linux> 权限
目录 权限人员相对于文件来说的分类更改权限文件的拥有者与所属组umask粘滞位 权限 权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中的每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以…...

Nacos Docker 快速部署----解决nacos鉴权漏洞问题
Nacos Docker 快速部署 1. 说明 1.1 官方文档 官方地址 https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html docker启动文件的gitlhub地址 https://github.com/nacos-group/nacos-docker.git 问题: 缺少部分必要配置与说明 1.2 部署最新版本Nacos&…...

存储或读取时转换JSON数据
一、 数据库类型 二、使用Hutool工具 存储时将数据转换为JSON数据 获取时将JSON数据转换为对象 发现问题: 原本数据对象是Address 和 Firend但是转换完成后数据变成了JSONArray和JSONObject 三、自定义TypeHandler继承Mybatis的BaseTypeHandler处理器 package …...
Spring Data JPA的作用和用法
Spring Data JPA 是 Spring 框架的一个模块,它提供了一种数据访问抽象,允许以一种声明式和简洁的方式来处理数据库操作。它基于 Java Persistence API (JPA),是一个行业标准的 ORM(对象关系映射)规范,用于将…...

【go项目01_学习记录08】
学习记录 1 模板文件1.1 articlesStoreHandler() 使用模板文件1.2 统一模板 1 模板文件 重构 articlesCreateHandler() 和 articlesStoreHandler() 函数,将 HTML 抽离并放置于独立的模板文件中。 1.1 articlesStoreHandler() 使用模板文件 . . . func articlesSt…...

Java中的线程
一、创建线程的几种方式? ① 通过继承Thread类并重写run方法 ,实现简单但不可以继承其他类 Thread底层也是实现了Runnable接口,重写的是run而不是start方法 ②实现Runnable接口并重写run方法, 避免了单继承的局限性ÿ…...
顺序表的实现(迈入数据结构的大门)(完整代码)
seqlist.h #pragma once typedef int SLDataType;#include<stdio.h> #include<stdlib.h> #include<assert.h>typedef struct SeqList {SLDataType* a;int size; // 有效数据个数int capacity; // 空间容量 }SL;//初始化和销毁 void SLInit(SL* ps); void SL…...

neo4j-5.11.0安装APOC插件or配置允许使用过程的权限
在已经安装好neo4j和jdk的情况下安装apoc组件,之前使用neo4j-community-4.4.30,可以找到配置apoc-4.4.0.22-all.jar,但是高版本neo4j对应没有apoc-X.X.X-all.jar。解决如下所示: 1.安装好JDK与neo4j 已经安装对应版本的JDK 17.0…...
mybatis 中 #{}和 ${}的区别是什么?
在 MyBatis 中,#{} 和 ${} 是两种用于参数替换的语法,但它们之间存在一些重要的区别,主要体现在安全性、预编译和动态 SQL 上。 安全性: #{}:这是预编译处理,MyBatis 会为传入的参数生成 PreparedStatement…...
深入解析C#中的接口设计原则
深入解析C#中的接口设计原则 目录 深入解析C#中的接口设计原则 一、接口设计的SOLID原则 二、接口设计的最佳实践 三、接口设计的高级技术 四、结论 接口在面向对象编程中扮演着至关重要的角色。它们是定义行为契约的一种方式,允许实现者提供这些行为的具体实现…...

106短信群发平台在金融和法务行业的应用分析
一、金融行业应用 1.客户通知与提醒:银行、证券、保险等金融机构经常需要向客户发送各类通知和提醒,如账户余额变动、交易确认、扣费通知、理财产品到期提醒等。106短信群发平台可以快速、准确地将这些信息发送到客户的手机上,确保客户及时获…...

Spring AOP(2)
目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...