我做了一些 POC,发现当我在 400 个项目的大集合中搜索时,比在 20 个集合(每个集合 20 个项目)中搜索快 6-7 倍。虽然在这两种情况下都使用了散列,但仅仅循环的成本怎么会如此之高?
最佳答案
您预计需要同样的时间还是长 20 倍的时间?对于 20 个集合,您平均需要 10.5 次查找(假设该项目恰好出现在其中一个集合中),因此结果应为 10.5。这与您报告的 6-7 因子相当接近。由于您没有向我们提供代码,因此我们无法指出您的基准测试失败的地方。但没有阅读有关 how to benchmark 的内容,没有人做对。
如果您想了解更多信息,请向我们提供更多详细信息。
<小时/>PS:您几乎不应该像当时那样使用 20 套。一个Map<Item, Integer>
作为集合分区的表示要好得多,并且与 Set<Item>
一样快(实际上, Set
是通过 Map
实现的)。
关于java - 各种小HashSet和1个大HashSet的搜索差异是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41141431/