Как найти одинаковые байт[]-объекты в двух массивах одновременно?

Я пытаюсь реализовать атаку коллизий на хэши (я посещаю курс "криптография"). Поэтому у меня есть два массива хэшей (= последовательности байтов byte[]) и я хочу найти хэши, которые присутствуют в обоих массивах. После некоторых исследований и долгих размышлений я уверен, что лучшим решением на одноядерной машине будет HashSet (добавить все элементы первого массива и проверить через contains, присутствуют ли уже элементы второго массива).

Однако я хочу реализовать параллельное решение, поскольку у меня есть доступ к машине с 8 ядрами и 12 ГБ RAM. Лучшее решение, которое я могу придумать, это ConcurrentHashSet, который можно создать с помощью Collections.newSetFromMap(new ConcurrentHashMap()). Используя эту структуру данных, я могу параллельно добавлять все элементы первого массива и - после добавления всех элементов - параллельно проверять через contains на идентичность хэшей.

Поэтому мой вопрос заключается в следующем: Знаете ли вы алгоритм, предназначенный именно для этой задачи? Если нет, есть ли у вас опыт использования такого ConcurrentHashSet относительно проблем и эффективной сложности времени выполнения? Или вы можете порекомендовать другую готовую структуру данных, которая могла бы мне помочь?

PS: Если кому-то интересны подробности: Я планирую использовать Skandium для распараллеливания моей программы.

6
задан Florian Pilz 2 January 2012 в 14:23
поделиться