c# - 为什么 Stack<T> 和 Queue<T> 没有 Capacity 属性而 List<T> 有?

标签 c# list stack queue capacity

Capacity 属性在 List 中是否比在其他集合(如 Stack 和 Queue)中更有用?还是有其他方法可以获取 Stack 或 Queue 的容量?

最佳答案

我认为 List 具有 Capacity 属性而 StackQueue 没有的原因是这些类型的正常用法是不同的。

对于 List,用大量值填充它是相当常见的,甚至在它创建一段时间后也是如此。提供 Capacity 属性(和构造函数参数)有助于减少将大量项目添加到列表时将完成的重新分配的数量。

StackQueue 另一方面,它们不会立即添加大量项目已创建。

据推测,Microsoft 认为不值得添加 Capacity 属性,因为它不会被频繁使用。

但是,请注意 Queue does have a constructor that allows you to specify an initial capacity , 和 so does Stack .

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

所以 Microsoft 认为它在构造时有用,但以后就没用了 - 所以他们只向构造函数添加了容量功能。

(顺便说一句,我刚刚快速检查了我们的代码库,似乎我们唯一一次使用 List 的容量实际上是在构建时。所以也许如果微软现在设计 List,他们可能还会省略 List 的 Capacity 属性...)

关于c# - 为什么 Stack<T> 和 Queue<T> 没有 Capacity 属性而 List<T> 有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338428/

相关文章:

c# - 如何使用新语法树部分更新编译?

c# - WinRT 应用程序和区域设置。根据用户的区域设置格式化日期和数字的正确方法?

python - psycopg2:在没有索引行的查询中使用列表

c - 在 C 中以相反的顺序传递参数有什么意义?

C 字符串递归堆栈复制还是...?

c# - 无法加载文件或程序集 'EntityFramework,版本 = 6.0.0.0,

c# - MVC 全局错误处理 : Application_Error not firing

python - python 中的 lambda 列表

Python删除列表的重叠

使用堆栈的 JAVA 逆波兰表示法