2016-12-14 2 views
1

Я сделал несколько POC и обнаружил, что при поиске в большом наборе из 400 предметов он в 6-7 раз быстрее, чем поиск в 20 наборах по 20 элементов каждый. Хотя в обоих случаях используется хеширование, но как так много стоит цикл?В чем разница в поиске между различными маленькими HashSet и 1 большой HashSet?

+3

Предположительно, если вы ищете в 20 наборах, вы делаете до 20 поисковых запросов вместо одного. Хешевые поиски бывают быстрыми, потому что хеш говорит вам, где найти объект. Looped lookups медленный, потому что вы смотрите в каждом месте, пока не найдете что-то. – khelwood

ответ

0

Ожидаете ли вы, что это займет то же время или в 20 раз дольше? С 20 наборами вам нужно 10,5 поисковых запросов в среднем (при условии, что элемент присутствует только в одном из них), поэтому должен получиться коэффициент 10.5. Это разумно близко к вашему зарегистрированному коэффициенту 6-7. Поскольку вы не дали нам никакого кода, мы не можем указать, где ваш тест не работает. Но, не прочитав ничего о how to benchmark, никто не понимает это правильно.

Если вы хотите узнать больше, предоставьте нам более подробную информацию.


PS: Вам вряд ли когда-либо понадобится 20 комплектов, как вы, вероятно, используете. A Map<Item, Integer> намного лучше как представление заданного разбиения и так же быстро, как и Set<Item> (фактически, Set реализован через Map).

Смежные вопросы