为什么Stack <T>和Queue <T>在List <T>时没有容量属性?

Set*_*o N 12 c# queue stack list capacity

Capacity属性在List中比在Stack和Queue等其他集合中更有用吗?或者有另一种方法来获得堆栈或队列的容量?

Mat*_*son 5

我认为,之所以List有一个Capacity财产,StackQueue不会是那些类型的正常使用是不同的.

对于List它来说,用一大组值填充它是相当常见的,甚至在创建它之后的一段时间.提供Capacity属性(和构造函数参数)有助于减少在向列表中添加大量项目时要执行的重新分配的数量.

StackQueue另一方面,在创建之后不会立即将大量项目添加到它们中.

据推测,微软决定不值得添加该Capacity属性,因为它不会被大量使用.

但是,请注意Queue确实有一个允许您指定初始容量的构造函数,Stack也是如此.

另请注意,这两个类也有一个TrimExcess()方法,如下面的@drch所述.

所以微软认为它在构建时会很有用,但以后没用 - 所以他们只向构造函数添加了容量功能.

(顺便说一句,我刚刚通过我们的代码库进行快速检查,它似乎是唯一一次我们使用能力List,其实是在施工时间.所以,也许如果微软现在正在设计名单,他们也可能会忽略的Capacity财产列表...)

  • 还有TrimExcess(),如果内部数组不是至少90%满,则将容量设置为当前计数. (2认同)