java-与“迭代次数在条目数和存储桶数之和上呈线性关系”的混淆

Java Tutorials (Set Implementations)

One thing worth keeping in mind about HashSet is that iteration is linear in the sum of the number of entries and the number of buckets (the capacity).

我发现此声明令人困惑,并且想知道是否有人可以澄清该声明的含义.据我了解,如果我们有x个存储桶,而每个存储桶中恰好有1个项目,则可以获得最佳的迭代性能.

设x = 200k.这给了我们20万个条目和20万个存储桶.

相反,如果所有项目都放在1个存储桶中(据我所读,这确实很可怕),我们将有200k条目数和1个存储桶.

由于200k 200k> 200k 1,是否表示如果应用上述陈述,则1个存储桶的性能要比200k存储桶的性能高?

解决方法:

Since 200k + 200k > 200k + 1, doesn’t that mean that if we apply the above statement, the performance of 1 bucket is more than the performance of 200k buckets?

是的,当遍历HashSet中的所有元素时,将它们分散在多个存储桶中的事实是不好的.

当他们说迭代在条目数和存储桶数的总和中是线性的时,他们的意思是迭代在O(n m)中进行,其中n是存储桶数,m是输入项数.常量不显示.例如,可能花费的时间是0.0001 * n m,即与元素数量的影响相比,铲斗数量的影响确实很小.

(顺便说一句,还有另一个名为LinkedHashSet的数据结构,其特性与HashSet相似,但是迭代时间仅与元素数成正比.)

上一篇:java-多线程性能


下一篇:Python:有关改进逐块代码以读取数百万点的建议