0

我决定我需要创建一个 64 位列表来满足我的程序的一些需求,即使用 long 作为索引的能力。我查看了实现 List 的 Mono 代码,并得出一个普遍的结论,即无论我选择什么,我都应该对 IList 进行变体(使用 long)来使用它。

现在我的问题是,您认为这种设计的好方法是什么?我目前正在考虑两种可能性-> 由于 List 只是 Array 类的包装器,我可以重写 List 类以使用巨型数组;或者我可以编写类以使用列表列表来根据需要维护和增长数据。第一个问题似乎是选择了一个太大的数组,第二个问题是试图让 Remove() 和其他各种方法工作,而我可能需要执行大量内存复制以保持所有内容正确索引。你的意见?

4

1 回答 1

2

由于数组仅限于由 int 索引,因此无论如何您都必须使用它们的倍数。我会直接去列表列表。请注意,CLR 中的所有对象都受到 2Gb 单块内存的限制以进行分配。

旁注:

  • 如果您计划在中间实现支持插入/删除操作的真正 4GB+ 线性阵列,您只需调整您的性能预期 - 任何插入或删除都会很慢。在这样的规模下,仅附加数组可能是合理的方法。
  • 如果添加/删除很重要,请考虑其他一些数据结构,即B-tree。在大多数情况下,您会牺牲恒定的访问时间,但会获得合理的收益。
  • 如果您的数组稀疏,请考虑使用简单的 Dictionary 代替或作为后备存储。

这是有关大型阵列的更详细讨论的链接。

于 2012-09-23T04:13:00.207 回答