java - 更改 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。
解决方案
您可以使用Collections.shuffle(List<?> list)
shuffle 中的元素list
。
ArrayList<Move> randomMoves = new ArrayList<>(moves);
Collections.shuffle(randomMoves);
代码的第一行创建一个ArrayList<Move> randomMoves
包含 的元素,moves
代码的第二行将 中的元素打乱randomMoves
。
推荐阅读
- python - 如何用 Pandas DataFrame 中先前值的一些变化替换 NaN?
- android - 如何在Android Room数据库中组合两个不同的字段,其中(“valueA”,“valueB”),(“valueB”,“valueA”)是1个条目
- javascript - 为什么这两个函数有不同的结果?(对不起,我不知道如何描述它们)
- terraform - 在 Terraform 中为 AWS ECS Fargate 启用 App Mesh 集成
- go - 为什么返回 &strut 而不是返回 ${name, 0}
- reactjs - 无法从 node_modules\uuidv4\build\lib\uuidv4.js 解析模块 util
- python - python列表的累积和
- python - 如何获得没有括号的输出?
- excel - 如何根据单元格范围重命名文件名?
- rust - Rust:如何使用 async-std + TLS + HTTP 代理(http 隧道)?