Подходящая структура данных Java для анализа большого файла данных - PullRequest
1 голос
/ 30 ноября 2011

У меня довольно большой текстовый файл (~ 4 м строк), который я хотел бы проанализировать, и я ищу совет относительно подходящей структуры данных, в которой хранятся данные.Файл содержит строки наподобие следующего:

Date        Time    Value
2011-11-30  09:00   10
2011-11-30  09:15   5
2011-12-01  12:42   14
2011-12-01  19:58   19
2011-12-01  02:03   12

Я хочу сгруппировать строки по дате, поэтому моей первоначальной мыслью было использование TreeMap<String, List<String>> для сопоставления даты с остальной частью строки, но это TreeMap из List смешная вещь?Я полагаю, что я мог бы заменить ключ String на объект даты (чтобы исключить так много сравнений строк), но это List, так как я беспокоюсь, что значение может быть неподходящим.1010 *, потому что я хочу перебрать ключи в порядке дат.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Нет ничего плохого в использовании List в качестве значения для Map. Все эти <> выглядят некрасиво, но совершенно нормально поместить класс обобщений в класс обобщений.

Вместо использования String в качестве ключа, вероятно, было бы лучше использовать java.util.Date, поскольку ключи являются датами. Это позволит TreeMap более точно отсортировать даты. Если вы храните даты как Strings, тогда TreeMap может неправильно сортировать даты (они будут отсортированы как строки, а не как «реальные» даты).

Map<Date, List<String>> map = new TreeMap<Date, List<String>>();
1 голос
/ 30 ноября 2011

Нет возражений против использования списков. Хотя в вашем случае, возможно, List<Integer> в качестве значений карты будет уместным.

1 голос
/ 30 ноября 2011

является ли TreeMap of Lists нелепым занятием?

Концептуально нет, но это будет очень неэффективно для памяти (как из-за Map, так и из-за List). Вы смотрите на накладные расходы 200% и более. Что может или не может быть приемлемым, в зависимости от того, сколько памяти вы должны тратить.

Для более эффективного использования памяти создайте класс, в котором есть поля для каждого столбца (включая Date), поместите все в List и отсортируйте его (в идеале с помощью быстрой сортировки), когда вы закончите чтение .

...