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

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...