场景
有时候我们需要随机获取list中的数据来做判断,判断不通过再随机取下一个数据,如果每次都随机取获取太麻烦了,我们可以直接将list中的数据随机打乱,然后返回list就可以循环该list来处理就可以了。
代码实现
/**
* suibibk.com
* @author 小林同学
*
*/
public class RandomList {
/**
* 输入一个list,返回一个打乱顺序的list
* @param list
* @return
*/
public static List<String> getRandomList(List<String> list){
if(list==null||list.size()==0) {
return null;
}
//1、建立一个随机数生成器对象
SecureRandom random = new SecureRandom();
//2、建立一个乱序的对象
List<String> result = new ArrayList<String>();
boolean flag = true;
int size = 0;
while(flag) {
size = list.size();
//随机生成一个下标
int index = random.nextInt(size);
//将内容添加入list中
result.add(list.get(index));
//从原有的list中移除
list.remove(index);
if(list.size()==0) {
flag=false;
}
}
return result;
}
public static void main(String[] args) {
for (int i=0;i<100;i++) {
//不能用这个方法获取list,这个方法获取的是AbstractList
//List<String> list = Arrays.asList(str);
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
List<String> result = getRandomList(list);
System.out.println(result);
}
}
}
测试结果
...
[3, 5, 4, 2, 1]
[3, 2, 5, 1, 4]
[4, 5, 2, 1, 3]
[2, 3, 4, 1, 5]
[5, 1, 4, 2, 3]
[2, 1, 3, 4, 5]
...