Рассмотрим огромный CSV со следующей структурой (модифицированной для простоты):
ID, NAME, ADDRESS, PHONE, MAIL
1, Jon, UK, 403, jon@skeet.com
2, Marc, UK, 292, marc@gravel.com
3, Darin, France, 291, darin@dimitrov.com
...
(Some million records)
Естественная структура данных для быстрой выборки - это хэш-таблица, где каждый ID
является ключом, а NAME, ADDRESS, PHONE, MAIL
- значением. Моя дилемма - это структура данных значений.
Хранение в HashMap
, где каждый заголовок строки является ключом, является пустой тратой пространства, потому что заголовки строк одинаковы для каждой строки. Хранение его в виде массива приведет к потере метаданных для каждого элемента, потому что читатель
Я думал о двух подходах:
Перегрузить хэш-карту Java. Заголовки строк будут сохранены один раз, и каждый ID
будет связан с массивом строк. Метод get()
будет перегружен, поэтому он вернет карту между строками заголовка и соответствующими полями в строке.
Создать тупой класс, который хранит данные для каждой строки, используя геттеры и сеттеры (row.getMail()
, row.getAddress()
, ...)
Какой правильный путь с точки зрения эффективности памяти, безопасности типов и скорости?