Лучшая структура данных Java для хранения таблицы оракула из 3 столбцов? Массив из 3 столбцов? или двойная карта? - PullRequest
0 голосов
/ 23 октября 2009

Какова лучшая структура данных для хранения таблицы оракулов, которая имеет около 140 строк на 3 столбца. Я думал о многомерном массиве.

В лучшем случае я не обязательно имею в виду наиболее эффективный (но мне было бы интересно узнать ваше мнение), поскольку программа будет работать как работа с большим количеством времени, но у меня есть некоторые ограничения:

Сначала несколько ключей могут быть "нулевыми". поэтому первый столбец может иметь несколько нулевых значений. Мне также нужно иметь возможность доступа к элементам из других столбцов. Что-нибудь лучше, чем линейный поиск для доступа к данным?

Итак, опять что-то вроде [] [] [] сработало бы ... но есть ли что-то вроде карты с 3 столбцами, куда я могу получить доступ по ключу или по второму столбцу? Я знаю, что карты имеют только два значения.

Все данные, вероятно, будут строками или отлиты как строки.

Спасибо

Ответы [ 4 ]

4 голосов
/ 23 октября 2009

Пользовательский класс с 3 полями и java.util.List этого класса.

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

3 голосов
/ 23 октября 2009

Это еще один пример того, как люди пишут на фортране на объектно-ориентированном языке.

Java об объектах. Было бы гораздо лучше, если бы вы начали использовать объекты для абстрагирования вашей проблемы, скрытия подробностей от клиентов и уменьшения связности.

Какой чувствительный объект со значимым поведением представляют эти три элемента? Я бы начал с этого, а потом позаботился о структурах данных и их сохранности.

Все данные, вероятно, будут строками или отлиты как строки.

Это хорошо, если они действительно являются строками, но я бы посоветовал вам взглянуть глубже и посмотреть, сможете ли вы добиться большего успеха.

Например, если вы пишете приложение, использующее кредитные баллы, у вас может возникнуть желание сохранить его в виде числового столбца в базе данных. Но вы можете извлечь выгоду из более сложного рассмотрения проблемы и инкапсуляции этого значения в объект CreditScore. Когда у вас это есть, вы понимаете, что можете добавить что-то вроде юнитов («FICO» против «TransUnion»), масштаба (диапазон от 0 до 850) и, возможно, какое-то богатое поведение (например, правила, регулирующие, когда нужно переупорядочивать счет). Вы инкапсулируете все в один объект, а не разбрасываете логику для работы с кредитными баллами по всей базе кода.

Начните меньше думать с точки зрения таблиц и столбцов и больше об объектах. Или поменяйте язык. В Python есть понятие встроенных кортежей. Возможно, это будет работать лучше для вас.

2 голосов
/ 23 октября 2009

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

class Record {
   String field1;
   String field2;
   String field3;
}

и

   Map<String, Record> firstKeyMap = new HashMap<String, Record>();
   Map<String, Record> secondKeyMap = new HashMap<String, Record>();
1 голос
/ 23 октября 2009

Я бы создал объект, который отобразит вашу запись, а затем создал бы коллекцию этого объекта.

...