Итак, я пишу 2D-движок Java на основе LWJGL. (Это будет с открытым исходным кодом, но когда это будет немного более отточено.: P) Я довольно далеко вперед, но, пытаясь пройти еще одну полировку, я решил, что мне нужно какое-то внешнее мнение о структуре данных. Я пользуюсь.
Структура называется UpdateList <(generic)> . По сути, я хочу, чтобы полностью динамический список объектов представлял все объекты в игре, и в то же время имел возможность проходить через него со скоростью массива, поскольку предположительно можно ссылаться на сотни + объектов.
Для этого в классе есть 3 члена данных: ArrayList <(generic)> , массив того же типа и логическая отметка, изменившаяся список или нет (озаглавленный изменен ).
Класс работает довольно просто - объекты добавляются и удаляются из ArrayList, как вы можете себе представить, и при этом задает , изменяющее на true .
Тогда есть два метода, которые включают доступ к массиву - updateList (T []) и getUpdateList () .
updateList передает массив в ArrayList для его метода toArray (generic []); для массива установлено это новое значение (если изменено - истинно - если список не изменился, ничего не происходит).
getUpdateList возвращает массив.
Таким образом, для использования updateList вызывается всякий раз, когда разработчик хочет обновить массив, а getUpdateList используется для итерации. Это не только немного быстрее, чем просто использование ArrayList, но и позволяет избежать ConcurrentModificationErrors, а UpdateList можно редактировать во время итерации.
Итак, два вопроса:
1 :) Это хороший способ получения нужного мне типа структуры данных? С точки зрения использования / API это очень просто, но меня беспокоит метод ArrayList toArray. Сколько времени это займет при большем количестве записей? Если это громоздко, есть ли лучший динамический класс, который я могу использовать?
2 :) Во-вторых, мне не нравится вызывать updateLists (T [0]). Есть ли хороший способ управлять копией ArrayList в массив без необходимости в этом?