为索引 0 插入优化的 C# 集合?

标签 c# .net collections

哪些 C# 集合最适合零索引插入和追加到末尾?

我想最简单的是 LinkedList,但考虑到我对大字节缓冲区感兴趣,我怀疑每个节点的内存成本对于我的需求来说可能过于昂贵。

我的理解是,一个普通的 List 有一个缓冲区支持,其容量通常大于实际数据。当数据填满缓冲区时,将创建一个新缓冲区,并将旧缓冲区的内容传输到新缓冲区。这对于追加到结尾非常有用,但对于开始时的增长却很糟糕。我的测试,将一百万个随机整数附加/插入到 List:

  • 列表附加时间 0.014 秒。
  • 列表零插入时间 173.343sec

最佳答案

一种数据结构具有列表形式,但在两端(而非中间)都针对插入和删除进行了优化,称为 deque,它是“Double Ended”的缩写队列”。我不知道这些天标准库是否包含双端队列。

如果您对构建不可变双端队列的技术感兴趣,我建议您按照复杂性递增的顺序阅读:

如果您希望创建一个可变双端队列,使用与列表相同的技术非常简单。列表只是数组的包装器,其中数组在远端“太大”。要制作可变双端队列,您可以制作一个太大的数组,但数据位于中间,而不是小端。您只需跟踪数据的顶部和底部索引是什么,当您碰到数组的任一端时,重新分配数组并将数据复制到中间。

关于为索引 0 插入优化的 C# 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35065047/

相关文章:

c# - 如何知道一个事件是否在那里被调用了三秒钟?

c# - 为什么网络用户通过 NTLM 进行身份验证?

c# - 对 DFS 和 BFS 程序有用的 C# 类/方法

javascript - 如何测试 JavaScript 对象是否是有序类型的对象

c# - 为什么当我尝试在列表中查找 .IndexOf(a) 时返回 -1?

c# - 有没有办法对多个值进行排序,并只保留每个值中最大的一个?

c# - Winform应用,window最小化强制垃圾回收?

c# - 为什么 C# 不为集合实现 GetHashCode?

c# - 显示xml特殊字符

c# - 数据缓存技巧/技巧/AppFabric