Как я могу реализовать таблицу переменного размера, доступную по имени столбца и номеру строки в Java? - PullRequest
1 голос
/ 18 июня 2019

Идея состоит в том, чтобы создать таблицу для динамического сохранения и получения информации, поэтому я сделал это до сих пор

  • Сначала я подумал о Map<String, List<Object>>, где каждая запись представляет собой пару (column name, column values), и вставка значения будет
Map<String, List<Object>> table = new HashMap<>();
table.computeIfAbsent("Column Name", col -> new ArrayList()).add("value");

Преимущество : table.get("Column Name").get(row) легко доступен для каждого столбца, и я могу быть уверен в названии и количестве столбцов

Недостаток : итерация строки антиинтуитивна (требуется доступ через имя столбца, а затем номер строки), и я не могу гарантировать, что количество значений, введенных в каждый столбец, одинаково.

  • Теперь, если я обменяюсь ролями «Карта» и «Список», чтобы использовать что-то вроде List<Map<String, Object>>, Карты будут действовать как строки таблицы, и вставка значения будет
List<Map<String, Object>> table = new ArrayList();
Map<String, Object> row = new HashMap<>();
row.put("Column Name", "value");
table.add(row);

Преимущество : итерация строки более интуитивна, каждый столбец легко доступен с помощью table.get(row).get("Column Name"), и я могу быть уверен в количестве строк

Недостаток : Я не могу гарантировать, что у каждой вставленной строки будут одинаковые столбцы.

Какой из них мне следует использовать? Как я могу улучшить их? Есть ли лучший подход?

1 Ответ

1 голос
/ 18 июня 2019

Я могу предложить немного другой вариант, который будет использовать простой 2D-массив объектов для таблицы вместе с отдельной хэш-картой для получения индекса столбца на основе имени.Например, для таблицы 3x3 мы можем попробовать:

Map<String, Integer> cols = new HashMap<>();
cols.put("col1", 0);
cols.put("col2", 1);
cols.put("col3", 2);

Object[][] table = new Object[][];
table[1][2] = new String("Jon Skeet");

Затем, чтобы получить доступ к записи во второй строке и третьем столбце, мы можем попробовать:

String value = table[1][cols.get("col3")];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...