Какой самый быстрый способ изменить порядок элементов в ArrayList?

#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 .