鸿蒙开发-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.*.*(..))的大量重…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
