Если база данных не вариант, у меня есть идея:
Preprocess свой второй файл: захватить его и отсортировать его (в алфавитном порядке):
Anna
Aqua
Claire
Jeremy
Joseph
Vill
Теперь создать файл, который отображает каждый символ алфавита до номера строки, где он используется в качестве стартового символа имени:
A,0
C,2
J,3
V,5
Предыдущие шаги c alled preprocessing, и вы должны сделать это перед компиляцией своей программы. Очевидно, что сортировка такого огромного файла займет много времени, но при использовании этого метода ваша развернутая программа будет намного быстрее, если вы используете этот метод:
Когда вы повторяете свой первый файл, предположим, что вы найдете Joseph
. То, что вы делаете, это захватить первый символ J
, а затем использовать сопоставление для определения номера первой строки, который используется этим символом. Отображение даст 3
, и поэтому вы будете перебирать второй файл на такой номер строки. Это экономит много времени, потому что вы сможете пропустить с помощью equals()
по нескольким строкам, которые явно не соответствуют вашим критериям поиска. Чтобы найти Joseph
, вам нужно будет только проверить на Jeremy
, а затем Joseph
.
Теперь, когда вы понимаете эту технику, вы можете сделать ее намного более эффективной, используя два уровня:: вместо каждого символа в алфавите создайте другое сопоставление для каждого символа алфавита.В случае J
было бы
JE,3
JO,4
Поскольку вы ищете Joseph
, вы легко определить, что номер строки, чтобы начать искать это четвертый один, таким образом, пропуская даже больше сравнений.
Вы можете сделать это на более уровнях: три, четыре и т. Д. Это зависит от вас, чтобы определить, какой из них наиболее оптимален в вашем случае. Сопоставления не занимают много места, и они сэкономят вам много времени, пропуская лишние записи.
Очевидным недостатком является то, что предварительная обработка файла с 70 миллионами записей является очень исчерпывающим - но это то, что вашим конечным пользователям не придется испытывать.
Это один из способов сделать это.
Примечание: Вам нужно будет повторить каждую строку второго файла, чтобы достичь нужного номера строки. Дело в том, что вам не нужно выполнять какие-либо сравнения, и вы увидите, что это позволит вам сэкономить много времени на обработку.