#java #performance
#java #Производительность
Вопрос:
У меня есть первый ArrayList:
ArrayList<Move> moves = new ArrayList<>();
и хотите случайным образом изменить порядок элементов во второй:
ArrayList<Move> randomMoves = new ArrayList<>();
Обычно я делаю:
while (randomMoves.size() < moves.size()) {
int index = (int) (Math.random() * moves.size());
while (randomMoves.contains(moves.get(index))) {
index = (int) (Math.random() * moves.size());
}
randomMoves.add(moves.get(index));
}
но само собой разумеется, что это катастрофа производительности
(для случайного выбора последних элементов потребуется время)…
обычно это не такая уж большая проблема, но этот код будет выполняться в критически важной части приложения, а у меня нет большого опыта работы с критически важным кодом…
просветите меня 🙂
S.
Комментарии:
1. Просто скопируйте все, а затем используйте
Collections.shuffle
?
Ответ №1:
Вы можете использовать Collections.shuffle(List<?> list)
для перетасовки элементов в list
.
ArrayList<Move> randomMoves = new ArrayList<>(moves);
Collections.shuffle(randomMoves);
Первая строка кода создает ArrayList<Move> randomMoves
элемент, содержащий элементы moves
, а вторая строка кода перетасовывает элементы randomMoves
.