首页 > 编程语言 >鸿蒙编程江湖:ArkTS 容器与原生容器在行为上的差异

鸿蒙编程江湖:ArkTS 容器与原生容器在行为上的差异

时间:2024-10-26 09:22:45浏览次数:1  
标签:容器 ArkTS Set 鸿蒙 Map collections Array

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

ArkTS 提供了一套容器集,包括 Array、Map、Set 等类型,用于存储和管理数据。ArkTS 容器与 JavaScript 原生容器在行为上存在一些差异,需要开发者注意。

ArkTS 的 Array、Map、Set 等容器类型

  • Array:ArkTS 的 Array 类型与 JavaScript 的 Array 类型类似,但有一些差异,例如不允许在遍历、访问过程中进行元素的增删改操作。
  • Map:ArkTS 的 Map 类型与 JavaScript 的 Map 类型类似,但有一些差异,例如构造函数中必须提供一个初始值的构造函数,且不支持使用计算属性名称。
  • Set:ArkTS 的 Set 类型与 JavaScript 的 Set 类型类似,但有一些差异,例如不允许在遍历、访问过程中进行元素的增删改操作,且 Sendable 类和接口中不允许使用计算属性名称。

原生 API 与 ArkTS API 的差异点

原生 API ArkTS API
Array.from collections.Array.from
Array.slice collections.Array.slice
Map.entries collections.Map.entries
Map.keys collections.Map.keys
Map.values collections.Map.values
Set.add collections.Set.add
Set.delete collections.Set.delete
Set.has collections.Set.has

ArkTS 容器在并发中的应用

ArkTS 容器可以安全地在并发实例间传递,避免了数据竞争问题。但是,ArkTS 容器并不是线程安全的,内部使用了 fail-fast 机制。因此,在并发环境中使用 ArkTS 容器时,需要使用异步锁机制保证容器的安全访问。

ArkTS 容器的创建与操作实例

以下是一个简单的示例,演示如何创建和操作 ArkTS 容器:

import { collections } from '@kit.ArkTS';
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Column() {
      Text(this.message)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(async () => {
          // 创建 Array
          const arr = new collections.Array<number>();
          arr.push(1);
          arr.push(2);
          arr.push(3);
          console.log(arr); // 输出: [1, 2, 3]
          // 创建 Map
          const map = new collections.Map<number, string>();
          map.set(1, 'one');
          map.set(2, 'two');
          map.set(3, 'three');
          console.log(map); // 输出: {1: "one", 2: "two", 3: "three"}
          // 创建 Set
          const set = new collections.Set<string>();
          set.add('one');
          set.add('two');
          set.add('three');
          console.log(set); // 输出: Set { "one", "two", "three" }
        })
        .width('100%');
    }
    .height('100%');
  }
}

这段代码定义了一个名为 Index 的组件,并在组件中显示了一条文本消息 "Hello World"。点击按钮会创建 Array、Map 和 Set 容器,并输出容器的内容。

ArkTS 容器与原生 API 对比表

原生 API ArkTS API 差异点
Array.length collections.Array.length 不允许设置 length
Array.pop collections.Array.pop 不允许在遍历、访问过程中进行元素的操作
Array.push collections.Array.push 不允许在遍历、访问过程中进行元素的操作
Array.concat collections.Array.concat 不允许在遍历、访问过程中进行元素的操作
Map.new collections.Map.create 必须提供初始值
Map.entries collections.Map.entries 不支持 thisArg
Map.keys collections.Map.keys 不支持 thisArg
Map.values collections.Map.values 不支持 thisArg
Set.add collections.Set.add 不允许在遍历、访问过程中进行元素的操作
Set.delete collections.Set.delete 不允许在遍历、访问过程中进行元素的操作
Set.has collections.Set.has 不支持 thisArg

总结

通过以上介绍,您可以了解到鸿蒙系统中 ArkTS 容器与原生容器的差异,以及 ArkTS 容器在并发中的应用。希望本文能够帮助您掌握鸿蒙系统中的并发编程技术,并开发出更优秀的鸿蒙应用。

标签:容器,ArkTS,Set,鸿蒙,Map,collections,Array
From: https://www.cnblogs.com/samex/p/18503635

相关文章

  • 鸿蒙编程江湖:ArkTS开发综合案例与最佳实践
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。简介:构建复杂应用的全方位指南在掌握了......
  • 鸿蒙编程江湖:ArkTS 的多线程与序列化支持
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。提升性能的高级技术在当今的软件开发领......
  • 鸿蒙编程江湖:ArkUI 的声明式 UI 编程与状态管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。ArkTS的UI编程范式ArkUI是华为鸿蒙......
  • 鸿蒙编程江湖:I/O 密集型任务处理及 ArkTS 的异步锁机制
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。I/O密集型任务是指需要进行大量磁盘读......
  • 鸿蒙案例实践:图像处理应用中多线程任务调度与性能优化
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。1.项目需求与目标分析背景:图像处理......
  • 鸿蒙案例实践:智能家居控制面板的并发任务与UI交互设计
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。1.项目概述与需求分析背景:随着物联网......
  • Docker | 初次认识Docker并理解Docker中的镜像、容器、仓库概念
    认识Docker1.Docker简介1.1是什么1.2容器与虚拟机比较传统虚拟机技术容器虚拟化技术对比容器和虚拟机有什么不同?1.3能干嘛1.4安装⭐1.5Docker的基本组成⭐⭐Docker平台架构图解(入门版)Docker工作原理Docker平台架构图解架构版(深入版)1.Docker简介1.1是......
  • kubernetes【k8s介绍】【快速部署应用,管理容器】
    k8s提供:集中式管理集群的方法,也可快速部署应用1.关于部署方案2.什么时候需要k8s当你的应用只是跑在一台机器,直接一个docker+docker-compose就够了,方便轻松;当你的应用需要跑在3,4台机器上,你依旧可以使用每台机器单独配置运行环境+负载均衡器;当你的应用需要跑在10,20台机器......
  • 【容器】容器与虚拟机对比:全面解析与应用指南
    目录引言1.基本概念1.1容器1.2虚拟机(VM)2.架构比较3.性能比较3.1启动时间和资源消耗3.2性能指标4.用例场景4.1微服务架构4.2开发与测试4.3大规模部署5.安全性比较5.1容器安全性5.2虚拟机安全性6.生态系统6.1容器生态6.2虚拟机生态7.选择指南7.1选......
  • 处理容器报错:[ERROR] .. Get “http://safeline-fvm/skynetinto“: dial tp: lookup s
    雷池社区版(WAF)是基于容器部署的在容器化应用的部署和运行过程中,我们常常会遇到各种报错信息。其中,形如“[ERROR]detect/skynet.go:114Get“http://safeline-fvm/skynetinto":dialtp:lookupsafeline-fvmon127.0.0.11:53:servermisbehaving”以及“panic:Get......