Здесь отсутствует контекст:
Что вы пытаетесь сканировать? Какой тип приложения? Как часто ожидается запуск?
Это важно, потому что разные сценарии требуют разных решений:
- Если это одноразовое сканирование, то это, вероятно, ненужная оптимизация. Даже для текстового файла размером 20 МБ в худшем случае это не займет больше пары минут.
- Если у вас есть набор входных данных, и для каждого из них вы сканируете все слова в файле размером 20 МБ, возможно, было бы лучше отсортировать / проиндексировать файл размером 20 МБ, чтобы было легче искать совпадения и пропускать 99. % ненужных сравнений. Кроме того, если входные данные имеют тенденцию повторяться, возможно, имеет смысл использовать кэширование.
Другие решения также могут иметь значение, в зависимости от конкретной проблемы.
Но если вы сводите его только к сравнению первых 3 символов двух строк, я считаю, что приведенные здесь фрагменты кода хороши, как вы и собираетесь - они все O (1) *, так что есть никакой радикальной оптимизации вы не сможете сделать.
* Единственное место, где это может не выполняться, - это получение длины строки O (n), а не O (1) (что имеет место для функции strlen в C ++), а это не так для строковых объектов Java и C #.