日常开发踩坑记录
概要:Java中list内容不变进行随机排序
发现问题:
项目中用的是Google开源的proto,其中使用getList得到一个数组,使用常见随机排序方式Collections.shuffle(list);报错。
解决问题:
创建一个新的list把proto中getList得到的数组内容赋值进去,此时也不可以使用Collections.shuffle(list);进行随机排序,需要使用下面的方式:
public <T> void shuffle1(List<T> list) {
int size = list.size();
Random random = new Random();
for(int i = 0; i < size; i++) {
// 获取随机位置
int randomPos = random.nextInt(size);
// 当前元素与随机元素交换
T temp = list.get(i);
list.set(i, list.get(randomPos));
list.set(randomPos, temp);
}
}
结果
常见的List<Integer>可以使用Collections.shuffle(list);方式进行随机排序,其他泛型需要注意。