From 5a488f9008b2ec9cdf7d9edf02361329610fd046 Mon Sep 17 00:00:00 2001 From: chengyuli Date: Wed, 18 Jun 2025 03:03:52 +0000 Subject: [PATCH] add zh-cn/release-notes/changelogs/OpenHarmony_6.0/changelogs-arkts.md. Signed-off-by: chengyuli --- .../OpenHarmony_6.0/changelogs-arkts.md | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 zh-cn/release-notes/changelogs/OpenHarmony_6.0/changelogs-arkts.md diff --git a/zh-cn/release-notes/changelogs/OpenHarmony_6.0/changelogs-arkts.md b/zh-cn/release-notes/changelogs/OpenHarmony_6.0/changelogs-arkts.md new file mode 100644 index 00000000000..833f6b053c3 --- /dev/null +++ b/zh-cn/release-notes/changelogs/OpenHarmony_6.0/changelogs-arkts.md @@ -0,0 +1,69 @@ +## cl.arkts.1 TreeSet 扩容导致比较器丢失问题,新增OrderedSet/OrderedMap修复问题,废弃TreeSet/TreeMap容器 + +**访问级别** + +公开接口 + +**变更原因** + +使用TreeSet/TreeMap模块的add接口触发扩容时,TreeSet/TreeMap自定义比较器会在扩容后丢失,导致之后进行默认排序。 + +**变更影响** + +**变更前:** + +对于下述代码,**实际执行结果中预期为false、false、false、false、false,实际执行结果为false、false、false、true、true**,原因在于扩容后比较器丢失,remove(a1)失败,后续行为异常。 + +```ts +import TreeSet from '@kit.ArkTS'; +class A { +time: number; + +constructor(time: number) { + this.time = time; +} + +static readonly compared = ((first: A, second: A): number => { + return first.time - second.time; + }) as Function as (first: A, second: A) => boolean; +} + +const a1 = new A(1); +const a2 = new A(2); +const a3 = new A(3); +const a4 = new A(4); +const a5 = new A(5); +const map = new TreeSet(A.compared); // 用例差异点 +map.add(a1); +map.add(a2); +map.add(a3); +map.add(a4); +map.add(a5); +for (let i = 0; i < 5; ++i) { + map.remove(a1); + console.log('spt', i, map.has(a1)); + map.add(a1); +} +``` + +**变更后:** + +TaggedTree比较器扩容前后一致,TaggedTree的所有add、remove都用同一个比较规则,**输出结果为false、false、false、false、false,与预期一致。** + +**起始 API Level** + +8 + +**变更发生版本** + +OpenHarmony SDK 6.0 + +**变更的接口/组件** + +TreeSet/TreeMap + +**适配指导** + +原本未使用自定义比较器时,不受影响; + +若使用到自定义比较器时,建议切换为新增的OrderedSet/OrderedMap。 \ No newline at end of file -- Gitee