Выбор быстрого алгоритма поиска подстроки
Есть такая задача: отфильтровать строки в множестве файлов. Вариантов решения я вижу несколько:
- ReplaceAll. String.replaceAll(“pattern”,"$1" + 1);
- Pattern. Pattern p = Pattern.compile(“pattern”); and etc.
- Ручной способ через indexOf и substring
Первый способ можно сразу отбросить так как он медленный: на каждый файл будет компилироваться pattern. На следующих двух можно остановиться поподробнее.
У меня было чувство, что ручной способ всегда быстрее, хоть и немного дольше в реализации. Я написал небольшой тест, чтобы проверить насколько быстрее. Результат графически изображён ниже:
Тест запускал фильтрацию одного и того же файла 10к раз. Размер файла - 4286 символов. Время выполнения абсолютное и указано в миллисекундах.
Столбец А: время выполнения фильтрации с помощью ручного способа
Столбец В: время выполнения фильтрации с помощью pattern’а
Вывод 1: ручная фильтрация на порядок быстрее фильтрации с помощью pattern. Если не нужно производить более сложных подстановок, то ручной способ значительно лучше.
Вывод 2: при линейном увеличении размера файла, время фильтрации возрастает линейно для обоих способов.