AsReadOnly() 是获取集合的只读图像(与不可变集合的副本相比并不昂贵)的便捷方法。我想知道 ImmutableList 是否有类似 AsReadOnly 的方法?如果没有,有什么简单的方法可以实现类似的吗?
问问题
194 次
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 回答