Android с помощью ArrayLists - PullRequest
       7

Android с помощью ArrayLists

2 голосов
/ 26 октября 2011

Является ли "хорошей идеей" использовать arraylist для перебора группы предметов в игре?

Например, если у меня есть 5 "вражеских объектов", разумнее использовать это:

for (int e = 0; e < maxenemy; e++)
{
Enemy[e].Update();
}

или я могу использовать это с сопоставимыми результатами?

for(Enemy e : enemies)
{
Enemy.get(e).Update();
}

Я пытаюсь решить, является ли использование ArrayList приемлемым вариантом вместо статического массива "вражеских объектов"

Ответы [ 5 ]

0 голосов
/ 26 октября 2011

Вы должны использовать ArrayList вместо голого массива по многим причинам:

  1. Хотя решение для голого массива будет немного быстрее, почти во всех случаях разница будет незначительной.Почти наверняка узкие места в производительности будут в другом месте.

  2. Использование ArrayLists дает вам гибкость в использовании какого-либо другого типа List или Iterable в будущем.Позже вы можете, например, осознать, что вам нужно иметь возможность динамически добавлять и удалять врагов, но вам никогда не нужно индексировать в середине списка - в этом случае связанный список будет лучше.

  3. Сравните код двух решений:

int m = enemies.length; for (int i = 0; i < m; i++) enemies[i].update();

и

for (Enemy e : enemies) e.update();

Версия массива намного длиннее и, следовательно, более вероятна ошибка.Поэтому для повышения качества кода лучше использовать ArrayList.

0 голосов
/ 26 октября 2011

Способ № 2 хорош на всех устройствах, в то время как № 1 хорош только на устройствах с JIT.

Посмотрите на Использование расширенного синтаксиса цикла раздел здесь

0 голосов
/ 26 октября 2011

Если у вас фиксированное количество врагов, и вы всегда просто перебираете их, тогда массив будет немного быстрее.Однако ArrayList гораздо более гибок, если вам нужно изменить список или выполнить более сложные запросы.

0 голосов
/ 26 октября 2011

Что ж, список массивов, вероятно, был бы лучше, если ваша игра выигрывает или теряет врагов в течение своей жизни. Статический массив будет фиксированным и не очень гибким. Я также заметил, что ваш второй фрагмент кода, вероятно, лучше записать как

for(Enemy e : enemies)
{
e.Update();
}

Более простой синтаксис и, возможно, немного более эффективный. : D

0 голосов
/ 26 октября 2011

Основное различие между Array и ArrayList заключается в том, что Array имеет фиксированный размер, а ArrayList - нет и может постоянно расти. Так что, если вы знаете, что всегда будет только 5 вражеских объектов, то придерживайтесь Array, однако, если количество вражеских объектов растет, используйте ArrayList

EDIT:

Ваш пример ArrayList неверен. Должно быть:

for(Enemy e : enemies)
{
 e.Update();
}

Когда вы перебираете ArrayList, подобный этому, e становится фактическим объектом Enemy из списка врагов. Так что вы можете просто вызвать методы Enemy на e.

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