Быстрое сохранение и получение точек (связанных x и y) в Java.Список против массива - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь воссоздать настольную игру на Java, в которой я храню набор допустимых мест, которые можно разместить (для ИИ). Я подумал, что, возможно, вместо того, чтобы хранить в виде списка точек, было бы быстрее во время выполнения, если бы у меня был массив / список / словарь координат X, в котором был массив / список координат y, так что, как только вы нашли координату х вам нужно будет только проверить его Ys не все оставшиеся точки ».

Проблема в том, что я должен часто менять действительные баллы. Я придумал несколько возможных решений, но с трудом выбираю / внедряю их:

  • HashMap с X в качестве целочисленного ключа и Ys в качестве ArrayList.
    • Проблема: Мне нужно будет создавать новый ArrayList каждый раз, когда я добавляю X.
    • Также я не уверен в производительности HashMap во время выполнения.
  • int [X] [Y] Массив, инициализированный по размеру платы, где каждая точка установлена ​​в свое относительное положение (точка 2,3 устанавливает [2] [3]), недопустимая точка является недействительным целым числом.
    • Проблема: Мне бы пришлось пройти через все точки и проверить каждую точку.
  • Список точек Это будет просто список связанных точек / массивов.
    • Проблема: Списки работают медленнее, чем массивы.
    • Как использовать Связанный список точек по сравнению с проверкой всего массива, как указано выше?

Возможно, мне следует использовать 2d связанный список? Каков был бы самый быстрый способ выполнения этого?

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Вы беспокоитесь о неправильных вещах. Доступ к элементам коллекции / карты / массива чрезвычайно быстр. Графическая часть будет более чувствительной к производительности. Просто используйте любую структуру данных, которая наиболее естественна. Вряд ли вы будете хранить достаточно вещей, чтобы действительно иметь значение. Сначала создайте его, а затем выясните, где ваши проблемы с производительностью.

1 голос
/ 20 октября 2011

если вы используете ArrayList of Points, у вас почти такая же производительность, как и у массива (в Java)

, и я думаю, что это самое быстрое решение, потому что, как вы уже упоминали, вы должны выполнять итерацию пополный int-массив и HashMap и проверяющие списки массивов должны быть изменены в зависимости от изменения / добавления координат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...