Лучшая структура данных Java для хранения трехстолбцовой таблицы оракула?Массив из трех столбцов?или двойная карта?
-
06-07-2019 - |
Вопрос
Какая структура данных лучше всего подходит для хранения таблицы оракула размером около 140 строк на 3 столбца.Я думал о многомерном массиве.
Под лучшим я не обязательно имею в виду наиболее эффективный (но мне было бы интересно узнать ваше мнение), поскольку программа будет работать как задание с большим количеством времени на выполнение, но у меня есть некоторые ограничения:
Возможно, что несколько ключей сначала будут иметь значение «null».поэтому первый столбец может иметь несколько нулевых значений.Мне также нужно иметь доступ к элементам из других столбцов.Что-нибудь лучше, чем линейный поиск для доступа к данным?
Итак, еще раз, что-то вроде [][][] будет работать..но есть ли что-то вроде карты из трех столбцов, к которой я могу получить доступ по ключу или второму столбцу?Я знаю, что карты имеют только два значения.
Все данные, вероятно, будут строками или преобразованы в строки.
Спасибо
Решение
Если вам нужно получить доступ к вашим данным по ключу и по другому ключу, я бы просто использовал для этого две карты и определил отдельный класс для хранения вашей записи.
class Record {
String field1;
String field2;
String field3;
}
и
Map<String, Record> firstKeyMap = new HashMap<String, Record>();
Map<String, Record> secondKeyMap = new HashMap<String, Record>();
Другие советы
Пользовательский класс с тремя полями и java.util.List
этого класса.
В этом случае нет смысла помещать данные в массивы, вы не получаете никакого улучшения производительности и, конечно же, никакого улучшения удобства сопровождения кода.
Это еще один пример того, как люди пишут FORTRAN на объектно-ориентированном языке.
Java об объектах.Было бы намного лучше, если бы вы начали использовать объекты для абстрагирования своей проблемы, скрытия деталей от клиентов и уменьшения связанности.
Какой разумный объект со значимым поведением представляют эти три предмета?Я бы начал с этого, а о структурах данных и их устойчивости побеспокоился позже.
Все данные, вероятно, будут строками или преобразованы в строки.
Это нормально, если это действительно строки, но я бы посоветовал вам заглянуть глубже и посмотреть, сможете ли вы добиться большего.
Например, если вы пишете приложение, использующее кредитные рейтинги, у вас может возникнуть соблазн сохранить его как числовой столбец в базе данных.Но вы можете получить выгоду, если внимательно посмотрите на проблему и инкапсулируете это значение в объект CreditScore.Когда это у вас есть, вы понимаете, что можете добавить что-то вроде единиц измерения («FICO» или «TransUnion»), масштаба (диапазон от 0 до 850) и, возможно, некоторого разнообразного поведения (например, правил, определяющих, когда менять порядок оценок).Вы инкапсулируете все в один объект вместо того, чтобы разбрасывать логику работы с кредитными рейтингами по всей базе кода.
Начните меньше думать о таблицах и столбцах и больше об объектах.Или переключить язык.В Python встроено понятие кортежей.Возможно, это сработает для вас лучше.
Я бы создал объект, который отображает вашу запись, а затем создал коллекцию этого объекта.