Ответ зависит от того, каков основной шаблон доступа вашего приложения.
Если основной шаблон доступа ищет объект по определенной координате x, y, то вам, вероятно, лучше всего подойдет одно из следующего:
- 2D-массив (как у вас сейчас);то есть
Thing[][]
, - a
Map<Point, Thing>
, или - a
Map<Integer, Map<Integer, Thing>>
.
(я предлагаю третий вариант, потому что второй вариант является ответственнымприводить к созданию временного объекта Point
каждый раз, когда вы просматриваете структуру данных. Есть и другие способы справиться с этим, но это усложняет приложение.)
Если массив 2Dмалонаселенный, то подходы на карте сэкономят место за счет времени.Если массив плотно заполнен, то подходы Map могут использовать больше пробелов, чем 2D-массив.
Если основной шаблон доступа предназначен для поиска объектов вблизи заданной координаты x, y(или в регионе), то вам, вероятно, понадобится что-то вроде структуры данных с четырьмя деревьями.
Последнее, на что следует обратить внимание, - это неизбежные накладные расходы при использовании стандартных типов коллекций, особенно когда один или несколько изТипы параметров - это примитивный тип.
Если ваши требования к производительности особенно «жесткие», то разработка и реализация пользовательской структуры данных вручную сэкономит пространство и время ... если вы все сделаете правильно.Но недостатком является то, что у вас значительно больше кода для написания, тестирования и обслуживания, а также что пользовательская структура данных не будет совместима со стандартными API-интерфейсами сбора данных.