-4

AsReadOnly() 是获取集合的只读图像(与不可变集合的副本相比并不昂贵)的便捷方法。我想知道 ImmutableList 是否有类似 AsReadOnly 的方法?如果没有,有什么简单的方法可以实现类似的吗?

4

2 回答 2

3

不可变集合本质上是只读的。您可以轻松地签入ImmutableList<T>已经实现IReadOnlyList<T>IReadOnlyCollection<T>接口的文档。

当您访问不可变集合中的元素时,不会分配内存。另一方面,当您将元素添加到某个不可变数据结构时,会创建一个新的不可变集合(并使用一些内存)。许多不可变集合的实现不会将所有数据复制到新集合,而是与旧集合共享一些数据,因此在大多数情况下,您不应该太关心内存使用/分配时间。

一些集合,例如ImmutableHashSet<T>,有一个文档说明它们在内存分配的数量方面进行了优化。

在不可变集合之间共享一些数据背后的想法并不复杂。Wikipedia 有一个简单的示例(带有漂亮的图表),展示了在不可变单链表的情况下如何节省内存。

于 2016-05-17T23:40:31.263 回答
2

ImmutableList<T>是通过引用复制的,因此在没有性能损失的情况下传递是完全安全的。因此不需要AsReadOnly方法,因为它不会使其更容易复制。

于 2016-05-17T23:42:36.070 回答