混淆“迭代在条目数和桶数之和是线性的”

时间:2011-11-08 09:40:44

标签: java performance algorithm hashset

Java Tutorials (Set Implementations)

  

关于HashSet值得记住的一件事是,迭代在条目数和桶数(容量)之和中是线性的。

我发现这句话令人困惑,并且想知道是否有人可以澄清声明的含义。根据我的理解,如果我们在每个桶中都有x个桶和正好1个项目,那么就可以实现最佳的迭代性能。

我们的子x = 200k。这为我们提供了200k条目和200k桶。

相反,如果所有项目都在1个桶中(从我读到的,真的可怕),我们将有200k条目和1个桶。

200k + 200k> 200k + 1,这是否意味着如果我们应用上述声明,1个桶的性能是否超过200k桶的性能?

1 个答案:

答案 0 :(得分:3)

  

200k + 200k > 200k + 1起,这是否意味着如果我们应用上述声明,1个桶的性能是否超过200k桶的性能?

,当迭代HashSet中的所有元素时,它们在几个存储区中展开的事实是不好的。

当他们说迭代在条目数和桶数之和时是线性的,它们意味着迭代在 O(n + m)中,其中 n 是桶的数量, m 是条目的数量。常数没有透露。例如,它可能需要的时间是0.0001 * n + m ,即,桶的数量的影响确实非常小元素数量的影响。

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