У меня есть ArrayList, который будет обновляться один раз в секунду, чтобы выполнить некоторые основные проверки и поддерживать список игроков, которые в настоящее время выполняют множество условий.Самый эффективный способ обновления ArrayList
Мне интересно, какой наивысший способ сделать это - у меня есть 2 предложенных решения.
public void update() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (!playersOnLadder.contains(player)) {
if (checkPlayerOnLadder(player)) {
playersOnLadder.add(player);
}
} else {
if (checkPlayerOnLadder(player)) {
playersOnLadder.remove(player);
}
}
}
}
public void update() {
playersOnLadder.clear();
for (Player player : Bukkit.getOnlinePlayers()) {
if (checkPlayerOnLadder(player)) {
playersOnLadder.add(player);
}
}
}
Было бы около 75 участников в этом списке массивов в любой момент времени. «Проверка игрока на методе лестничного выглядит следующим образом:
private boolean checkPlayerOnLadder(Player player) {
int ladderAbsolute = this.getX()+this.getZ();
int playerAbsolute = (int) player.getLocation().getX()+ (int) player.getLocation().getZ();
//If the player is within 4 blocks (2 in each direction) of the ladder then return true.
if (ladderAbsolute == playerAbsolute || (ladderAbsolute-2 > playerAbsolute && ladderAbsolute+2 < playerAbsolute)) {
return true;
} else {
return false;
}
}
EDITED преобразуется в HashSet
Ваш код выглядит нечетным - если в списке * уже есть игрок, вы можете добавить его снова? Я хотел бы сосредоточиться на том, чтобы сделать код понятным и правильным во-первых, а затем * измерить * производительность, чтобы решить, хорошо ли это или нет. Но правильность важнее. –
В качестве побочного примечания; это порядок списка, потому что я отмечаю, что вы используете playersOnLadder.contains (player), содержит(), ужасно в ArrayLists. HashSets лучше для содержит –
Для второй альтернативы? Невозможно добавить игрока несколько раз, потому что мы очищаем этот список за раз, чтобы избежать чрезмерного использования методов checkPlayerOnLadder и ArrayList. –