作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
var usedIds = list.Count > 20 ? new HashSet<int>() as ICollection<int> : new List<int>();
假设 List 在 20 个或更少的项目时性能更高,而 HashSet 在项目数量更多时性能更高(来自 this 帖子),根据可预测的项目数量动态使用不同的集合类型是否是一种有效的方法?
每种集合类型的所有操作都是相同的。
PS:我也找到了HybridCollection似乎自动执行相同操作的类,但我从未使用过它,所以我也没有关于其性能的信息。
编辑:我的收藏主要用作具有许多插入和获取的缓冲区。
最佳答案
理论上,它可能是,这取决于您对集合执行的操作数量和类型。在实践中,这种微优化可以证明增加的复杂性是合理的,这种情况非常罕见。
还要考虑您正在处理的数据类型。如果您使用 int
作为问题第一行所建议的集合项,那么阈值将远小于 20,其中 List
不再许多操作比 HashSet
更快。
无论如何,如果您要这样做,我会创建一个新的集合类来处理它,类似于 HybridDictionary 的内容,并使用 IDictionary 等通用接口(interface)将其公开给您的用户代码。
并确保对其进行概要分析,以确保您的用例确实从中受益。
甚至可能有比这两个集合中的任何一个更好的选择,具体取决于您在做什么。也就是说,如果你正在做很多“之前或之后”的插入和遍历,那么 LinkedList可能更适合您。
关于c# - List<T> vs HashSet<T> - 动态集合选择是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19846062/
我是一名优秀的程序员,十分优秀!