有人可以举例说明持久集合与 kotlinx.collections.immutable 中的不可变集合有何不同吗?
我找到了这个解释,但是如果没有例子我就无法完全理解它:
持久集合是一种只能通过更新底层数据结构指针来修改的集合,这些指针现在将集合中未受影响的部分与新更新的部分链接起来。另一方面,不可变集合是在任何情况下都不能更改的集合。一旦集合存在,其内容就固定了。
用
kotlinx.collections.immutable
库中使用的术语来说,immutable集合是只读的集合,并提供额外的约定,即在创建集合后其内容无法修改。只读集合接口没有这个契约,只能保证集合不能通过接口修改,而只读集合的实际实现是可变的。
Collection (read-only)
/ \
ImmutableCollection MutableCollection
与相应的只读集合相比,不可变集合不提供额外的 API,除了
subList()
的 ImmutableList
方法被重写以返回 ImmutableList
以及 keys
、values
和 entries
的 ImmutableMap
属性也被重写以返回不可变集合。
持久集合是不可变集合的子类型,它提供修改操作 - 返回具有修改内容的持久集合的新实例的操作:
val original = persistentListOf("a", "b")
val modified = original.add("c")
// original still contains [a, b]
// modified contains [a, b, c]
持久集合修改操作通常采用避免复制原始集合全部内容并与原始集合共享内部数据结构未更改部分的方式来实现。这种实现需要了解集合内部数据结构的细节,因此必须是可以访问其内部实现细节的集合接口的成员函数。