【发布时间】:2014-07-08 12:36:30
【问题描述】:
我正在寻找像 this one proposed by Eric Lippert 这样的解决方案。这是一个很好的实现,因为它是不可变的,加上附加时间是O(1),但它的缺点是O(i) 随机访问时间。
在另一边there is a great implementation of collection 与O(1) 在追加和随机访问。唯一的问题是它强烈依赖于可变性。
我的问题是如何实现一个集合了这两种解决方案的优点的集合?那就是:
- 不变性
-
O(1)追加时间 -
O(1)随机访问时间
内存复杂度对我来说不是什么大问题。
【问题讨论】:
-
试用 C5 泛型:itu.dk/research/c5
-
具体是哪一个?
-
“应该足够了”?我不这么认为[来自文档]:“结构修改,例如添加、插入、更新或删除项目将引发 ReadOnlyCollectionException。”。它不提供附加功能。
-
@MaciejSz Scala documentation 声称其不可变 HashMap 的添加/查找复杂性“实际上是恒定的”。可能值得看看它是如何工作的。虽然它不提供随机访问,但您可以将这样的映射包装在 Eric 之类的列表实现中,并将其用作基于索引的查找。
-
@PeterLawrey 当您将集合聚合到另一个不可变对象中然后想要对该对象执行一些操作时,这会成为一个问题。如果此操作产生了该对象的新实例,其中修改了聚合集合的内容,那么别无选择,只能使集合不可变,或者破坏整个不可变链。另一种选择是克隆整个集合,这(用 Eric 的话来说)当然是愚蠢的。
标签: java c# data-structures collections time-complexity