ImmutableList 是否有类似 AsReadOnly 的方法?
Does ImmutableList have AsReadOnly like method?
AsReadOnly() 是获取集合的只读图像(与不可变集合的副本相比并不昂贵)的便捷方法。我想知道 ImmutableList 是否有类似 AsReadOnly 的方法?如果没有,有什么简单的方法可以类似地实现吗?
不可变集合本质上是只读的。您可以轻松查看 ImmutableList<T>
已经实现 IReadOnlyList<T>
和 IReadOnlyCollection<T>
接口的文档。
当您访问不可变集合中的元素时,不会分配内存。另一方面,当您向某个不可变数据结构添加元素时,会创建一个新的不可变集合(并使用一些内存)。许多不可变集合的实现不会将所有数据复制到新集合,而是与旧集合共享一些数据,因此在大多数情况下,您不必太担心内存 usage/allocation 时间。
一些合集,例如ImmutableHashSet<T>
,有一份文档说明它们在内存分配数量方面进行了优化。
在不可变集合之间共享一些数据背后的想法并不复杂。维基百科有一个简单的例子 (with a nice diagram) 展示了在不可变单链表的情况下如何节省内存。
ImmutableList<T>
是通过引用复制的,因此在没有性能损失的情况下传递是完全安全的。因此不需要 AsReadOnly
方法,因为它不会使复制变得更容易。
AsReadOnly() 是获取集合的只读图像(与不可变集合的副本相比并不昂贵)的便捷方法。我想知道 ImmutableList 是否有类似 AsReadOnly 的方法?如果没有,有什么简单的方法可以类似地实现吗?
不可变集合本质上是只读的。您可以轻松查看 ImmutableList<T>
已经实现 IReadOnlyList<T>
和 IReadOnlyCollection<T>
接口的文档。
当您访问不可变集合中的元素时,不会分配内存。另一方面,当您向某个不可变数据结构添加元素时,会创建一个新的不可变集合(并使用一些内存)。许多不可变集合的实现不会将所有数据复制到新集合,而是与旧集合共享一些数据,因此在大多数情况下,您不必太担心内存 usage/allocation 时间。
一些合集,例如ImmutableHashSet<T>
,有一份文档说明它们在内存分配数量方面进行了优化。
在不可变集合之间共享一些数据背后的想法并不复杂。维基百科有一个简单的例子 (with a nice diagram) 展示了在不可变单链表的情况下如何节省内存。
ImmutableList<T>
是通过引用复制的,因此在没有性能损失的情况下传递是完全安全的。因此不需要 AsReadOnly
方法,因为它不会使复制变得更容易。