Библиотека коллекции Java или пользовательский класс?

#java #data-structures #collections #arraylist

#ява #структуры данных #Коллекции #arraylist #java

Вопрос:

Я работаю над картографической утилитой, для ввода которой в приложение в формате CSV требуется умеренный объем данных. Эти CSV-файлы могут содержать более 100000 записей, причем каждая запись содержит примерно 50 элементов. Возможно, мне потребуется открыть несколько таких файлов одновременно. Данные нуждаются в двойной точности, но не для каждого элемента в записи. Эти элементы могут быть преобразованы в int или вызывать toString.

Мой вопрос заключается в следующем: моей первой мыслью было создать ArrayList из double[] . Моей второй мыслью было создать пользовательский объект данных (ArrayList из MyDataClass) для хранения этих данных в требуемых мне формах. Это заставило бы меня создать класс примерно с 45-50 переменными экземпляра. Я никогда не делал ничего подобного, и мне не помешало бы небольшое руководство по наилучшей практике для решения такой задачи!

Комментарии:

1. что вы имеете в виду под «вводом в приложение»? импортировано в базу данных? тогда вам не нужно хранить все в памяти.

2. Чтение CSV-файла в структуру данных (память). База данных на самом деле пока не вариант.

Ответ №1:

Оба подхода подходят. Все зависит от того, что вы будете делать с данными. Если это только данные и у него нет никаких методов, кроме getters, создание класса для их хранения может быть излишним. Если вы хотите добавить некоторое поведение к строке, затем создайте класс. 50 полей в уникальном классе — это немного многовато. Вы можете разделить класс на логические группы, но все зависит от того, что представляют данные.

Если мы предположим, что у вас открыто 10 файлов, каждый из которых имеет размер 100000 * 50 удвоений, это составит около 380 МБ. Вы должны добавить память для каждого массива double и для ArrayLists. Такого объема памяти может быть слишком много, а может и не хватить. Все зависит от объема памяти, который есть в вашей JVM. Если вы не можете хранить все в памяти, рассмотрите возможность чтения файлов по мере необходимости или сохраните данные в базе данных.

Комментарии:

1. Хорошая сделка. Да, есть некоторые модели поведения, которые я хотел бы смоделировать (агрегирование, соответствие и т.д.) Мне действительно нравится ваша идея разбить ее на логические части. Один раздел предназначен для отображения дорожки, другой — для отображения качества сигнала, третий — для общей информации, так что это отличное предложение!