У меня есть текстовый файл, в каждой строке которого есть текст, например:
1245 Собака Хаски
2356 Полосатый кот
3476 Собака Мопс
с огромным количеством произвольных данных, повторяющихся в строке, около 10 000 строк, ради аргумента, скажем, стремится к бесконечности.
У меня есть код, который считывает эти данные и сохраняет их в объекте, далее следует псевдокод;
Pet P;
lineInput = reader.readLine(); //where reader is reading the above mentionedfile
P.id = lineInput.split('\t')[0]
P.type = lineInput.split('\t')[1] //Assigning the parts of the line to it's relevant data members
P.breed = lineInput.split('\t')[2]
Теперь вот проблема, учитывая, что мне нужно иметь возможность сортировать, искать и отображать эти значения как можно быстрее, я не знаю, что мне лучше всего, я придумал два метода, которые можно увидеть ниже.
Способ 1: сохранить все объекты в списке массивов на основе их начального идентификатора
ArrayList<Pet> idStartsWith1;
if(P.id starts with 1)
idStartsWith1.add(P); // "1245 Dog Husky" will be added here
ArrayList<Pet> idStartsWith2;
if(P.id starts with 2)
idStartsWith2.add(P); // "2356 Cat Tabby" will be added here
ArrayList<Pet> idStartsWith3;
if(P.id starts with 3)
idStartsWith3.add(P); // "3476 Dog Pug" will be added here
Я думаю, что это будет более быстрый метод, так как эти массивы уже находятся в памяти процесса, но я боюсь, что это перегрузит память и вызовет проблемы. (Помните, количество строк в текстовом файле стремится к бесконечности)
Способ 2: Запишите все объекты в файл .dat на основе их начального идентификационного номера.
Writer writer1 = new Writer("idStartsWith1.dat"); //writer1 will write to file "idStartsWith1.dat"
if(P.id starts with 1)
writer1.write(P); // "1245 Dog Husky" will be writen to this file
Writer writer2 = new Writer("idStartsWith2.dat"); //writer2 will write to file "idStartsWith2.dat"
if(P.id starts with 2)
writer2.write(P);
Writer writer3 = new Writer("idStartsWith3.dat"); //writer3 will write to file "idStartsWith3.dat"
if(P.id starts with 3)
writer3.write(P);
Это предотвратит перегрузку памяти процесса, но я боюсь, что необходимость открывать, затем читать, а затем закрывать файл каждый раз, когда мне нужно найти и отобразить Pet, добавит значительные задержки во время выполнения.
Какой из этих двух методов будет работать лучше? или есть другой более эффективный метод, который не придет в голову такому новичку в Java, как я?