用HashSet.ElementAt
O(1)实现吗?如果不是,它是什么?
最佳答案
不,是O(n)。所有IEnumerable<T>
的扩展方法都是O(n)(因为IEnumerable<T>
唯一可以做的就是...枚举)。尽管如注释中所指出,它们确实尝试将其强制转换为可以更快地实现该操作的接口(interface)(例如,ElementAt
将尝试强制转换为IList<T>
以便实现O(1)操作)。对于HashSet<T>
仍然没有实现IList<T>
的情况,这没有帮助。
对于HashSet<T>
而言,“ElementAt”的概念实际上并没有任何意义,因为没有这样的“排序”。基本上,您只是得到一个随机元素。
关于.net - HashSet是否为Enumerable.ElementAt <TSource> O(1)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3279022/