容器类对象
=====

容器类对象在跨线程传递时，可通过序列化的机制，确保跨线程间的数据一致，从而实现跨线程数据传递。

支持序列化的容器类对象和支持的初始版本可以参考[容器类对象支持情况](#容器类对象支持情况)。

容器类对象中的成员必须是序列化支持的类型，序列化支持类型可以参考[线程间通信对象概述](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/serializable-overview)中的相关对象。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/f6/v3/Rmbo-V4GQ_Ojo29Qktnj8A/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073246Z&HW-CC-Expire=86400&HW-CC-Sign=E6813FC58D7FA81DA5E9BCED39C621777CAD9979820BCE862DA699194AC2C1BB)

*   容器类对象跨线程传递时，只能传递数据，自定义方法会丢失。如果需要自定义方法，则需要使用[@Sendable装饰器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-sendable#sendable装饰器)标识为Sendable function后，自定义方法可以跨线程传递。

#### 容器类对象支持情况

以下仅针对容器类对象，普通对象（Array、Map、Set等）的支持情况请参考[普通对象](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/normal-object)。

| 容器类名称 | 支持版本 |
| :-- | :-- |
| [TreeSet](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-treeset) | 搭载HarmonyOS 6.1.0及以上版本的设备支持 |
| [ArrayList](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-arraylist) | 暂不支持 |
| [List](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-list) | 暂不支持 |
| [LinkedList](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-linkedlist) | 暂不支持 |
| [Deque](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-deque) | 暂不支持 |
| [Queue](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-queue) | 暂不支持 |
| [Stack](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-stack) | 暂不支持 |
| [Vector](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-vector) | 暂不支持 |
| [HashMap](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-hashmap) | 暂不支持 |
| [HashSet](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-hashset) | 暂不支持 |
| [TreeMap](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-treemap) | 暂不支持 |
| [LightWeightMap](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-lightweightmap) | 暂不支持 |
| [LightWeightSet](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-lightweightset) | 暂不支持 |
| [PlainArray](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-plainarray) | 暂不支持 |

#### 使用示例

import { taskpool, TreeSet } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';

@Sendable
function sendableCompareFunc(firstValue: number, secondValue: number): boolean {
    return firstValue > secondValue;
}

@Concurrent
function treeSetTestFunc(treeSet: TreeSet<number>) {
  for (let value of treeSet) {
    console.info('value:', value);
  }
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '\_\_container\_\_', align: VerticalAlign.Center },
          middle: { anchor: '\_\_container\_\_', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          // 1. 创建TreeSet实例
          let treeSet: TreeSet<number> = new TreeSet<number>(sendableCompareFunc);

          treeSet.add(1);
          treeSet.add(5);
          treeSet.add(3);
          treeSet.add(2);
          // 2. 创建任务task，将treeSet传递给该任务，通过序列化传递给子线程
          let task = new taskpool.Task(treeSetTestFunc, treeSet);
          // 3. 执行任务
          taskpool.execute(task).then(() => {
            console.info('taskpool: execute task success!');
          }).catch((e: BusinessError) => {
            console.error(\`taskpool: execute task: Code: ${e.code}, message: ${e.message}\`);
          })
          this.message = 'success';
        })
    }
    .height('100%')
    .width('100%')
  }
}