При проектировании структуры данных для таких задач проще начать с определения интерфейса для SpreadSheet. Как только все операции (операции чтения, операции создания, операции изменения и операции удаления) определены, становятся очевидными требуемые характеристики (последовательный доступ, прямой доступ и т. д.) структуры данных.
В электронной таблице потребуются механизмы для прямого доступа к столбцам, строкам или ячейкам с использованием индексов/имен, которые вызывают карту. Также потребуется последовательный доступ (итерация) по строкам и столбцам, который требует списка. Итак, интерфейс MapList — это то, что вам нужно. Теперь нам нужно выбрать реализацию. Поскольку удаление может произойти в любом месте списка строк или столбцов, реализация LinkedList кажется лучшей. Это также позволило бы выполнять операции с постоянным временем для переупорядочивания списка. Подводя итог, можно сказать, что LinkedListMap будет лучшим выбором для строк и столбцов.
Электронная таблица класса:
LinkedListMap<String,Row> rows;
// RowKey --> Row. Row has data. This allows direct access and looping.
LinkedListMap<String,Col> cols;
//only metadata - name,sort status, visible/invisible...
//This allows direct access and looping.
класс Ряд:
LinkedListMap<String,Cell> cells; //colKey --> cell
//This allows direct access and looping.
ячейка класса:
Object value;
EType dataType; //enum for data type
класс Кол:
String name;
ESortState sortState; //ASC, DESC, NONE
boolean visible;
Чтобы получить доступ к определенной ячейке из листа:
rows.get(rowKey).getValue(cells.get(colKey).getName())
С приведенными выше структурами данных вы сможете легко реализовать даже сложные операции, такие как получение подтаблицы (прямоугольный выбор).
person
rahulmohan
schedule
20.02.2011