草庐IT

RemoveAt

全部标签

c# - 通用列表的 list.RemoveAt(0) 有多贵?

C#、.NET4。我们有一些性能关键代码导致了一些问题。它是一种经过修改的队列,实际上由列表支持。我想知道删除索引0处的元素有多昂贵。想到的问题是:根据List的支持方式,是否会在RemoveAt()之后发生任何内存分配/取消分配以补偿列表的新大小?例如,我知道调整数组的大小可能很昂贵(相对而言)我一直想象列表的行为类似于链表,这样删除零位置的元素就意味着简单地将列表起始引用从前一个零元素调整为曾经是第一个元素的元素(但是现在是第一个元素)。但是,我的“想象”和现实并不总是一致的。我一直假设RemovedAt是列表的O(1)。是这样吗? 最佳答案