首页 > 解决方案 > 更改 ArrayList 中元素顺序的最快方法是什么?

问题描述

我有一个第一个 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。

标签: javaperformance

解决方案


您可以使用Collections.shuffle(List<?> list)shuffle 中的元素list

ArrayList<Move> randomMoves = new ArrayList<>(moves);
Collections.shuffle(randomMoves);

代码的第一行创建一个ArrayList<Move> randomMoves包含 的元素,moves代码的第二行将 中的元素打乱randomMoves


推荐阅读