Для запуска приложения в корне проекта находится батник start.bat, в котором уже прописан аргумент ограничения использования памяти, а также второй номер столбца.
При запуске приложение полностью прочитывает файл, сохраняя значения указанного столбца и отступ в байтах каждой строчки от начала файла для более простой выборки данных всей строки позднее, поскольку условием было не хранить ВЕСЬ файл в памяти. (В моём случае это в среднем занимало 37-44 мс)
RandomAccessFile позволяет читать файл произвольно и легко работать с отступами в байтах, но является слишком медленным. Его оборачивание в FileReader и BufferedReader даёт огромный прирост к скорости, однако из-за использования фиксированного буффера полностью ломает привычные отступы в RandomAccessFile. Поэтому было принято решение подключить стороннюю библиотеку Apache PDFBox (поскольку это не CSV-парсер) для использования BufferedRandomAccessFile, который предоставляет готовое решение синхронизации использования скорости буффера BufferedReader совместно с произвольным чтением файла от RandomAccessFile.
Выбранные данные хранятся в структуре SortedMap для простоты поиска нужных данных, из-за этого также дополнительно соблюдается требование сортировки данных. Теперь программа попросит ввести строку для её автодополнения, после чего выполняется сам поиск по преждевременно сгенерированной структуре и подходящие значения забиваются в List. Подсчёт времени поиска идёт именно в этом куске кода с помощью nanoTime для большей точности, при указание данных как в примере у меня выходило в районе 14-17 мс.
После поиска происходит вывод найденной информации, однако, поскольку мы имеем лишь значение выбранного столбца, мы добираем данные из файла в конкретной строке с помощью сохраненных отступов и BufferedRandomAccessFile. Также, сам вывод в консоль здесь реализован с помощью PrintWriter для оптимизации вывода большого количества строк подряд. Однако, если всё-таки под "временем поиском" имелось ввиду и время вывода в консоль, то данный отрывок также засекался по времени и в моём случае выполнялся примерно за 14-15 мс, что в общем составляет около 30 мс.