本文旨在深入探讨华为鸿蒙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 的差异点

    原生 APIArkTS API
    Array.fromcollections.Array.from
    Array.slicecollections.Array.slice
    Map.entriescollections.Map.entries
    Map.keyscollections.Map.keys
    Map.valuescollections.Map.values
    Set.addcollections.Set.add
    Set.deletecollections.Set.delete
    Set.hascollections.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 对比表

原生 APIArkTS API差异点
Array.lengthcollections.Array.length不允许设置 length
Array.popcollections.Array.pop不允许在遍历、访问过程中进行元素的操作
Array.pushcollections.Array.push不允许在遍历、访问过程中进行元素的操作
Array.concatcollections.Array.concat不允许在遍历、访问过程中进行元素的操作
Map.newcollections.Map.create必须提供初始值
Map.entriescollections.Map.entries不支持 thisArg
Map.keyscollections.Map.keys不支持 thisArg
Map.valuescollections.Map.values不支持 thisArg
Set.addcollections.Set.add不允许在遍历、访问过程中进行元素的操作
Set.deletecollections.Set.delete不允许在遍历、访问过程中进行元素的操作
Set.hascollections.Set.has不支持 thisArg

总结

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


SameX
1 声望2 粉丝