鸿蒙开发-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.*.*(..))的大量重…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...