Если для создания объекта WordIndex используется конструктор по умолчанию, для хранения данных в памяти используется PATRICIA Trie (https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/trie/PatriciaTrie.html). Альтернативный конструктор позволяет указывать другие структуры для хранения данных, реализующие интерфейс IndexStorage, а также режим учета регистра букв.
Для компиляции проекта можно запустить скрипт build.bat для Windows, или выполнить цель maven из командной строки: mvn clean compile assembly:single
После этого в каталоге target создается jar-пакет. Запустить его можно командой demo.bat или java -jar target\wordIndexer-1.0-SNAPSHOT-jar-with-dependencies.jar [путь к файлу] [слово для поиска] Демонстрационная программа выводит индексы, в которых указанное слово встречается в файле, или "none", если слово не было найдено.
Для запуска тестов необходимо запустить команду:
mvn test
или tests.bat - вспомогательный скрипт для запуска тестов (для работы потребуется утилита tee).
В качестве эксперимента дополнительно был написан тест Benchmark. В нем сравнивается реальное время работы различных структур для хранения индекса: Trie, HashMap и TreeMap На графиах в каталоге images - pic1.png и pic2.png показано время работы для словарей различного размера. Теоретическая оценка времени доступа для HashMap - в интервале от O(1) до O(n), у PATRICIA Trie сложность поиска O(K), где K - число бит в ключе дерева. В реальности на персональном компьютере HashMap работает намного быстрее Trie и TreeMap, Видна логарифмическая зависимость от размера словаря у Trie и TreeMap и близкое к константе время работы у HashMap.