package org.nutz.lang.random;
import java.util.List;
/**
* 根据一个列表随机产生对象,每个对象只会被取出一次。 当数组耗尽,则一直返回 null
*
* @author Conanca
*/
public class ListRandom<T> implements Random<T> {
private List<T> list;
private Integer len;
private java.util.Random r = new java.util.Random();
private Object lock = new Object();
public ListRandom(List<T> list) {
this.list = list;
len = list.size();
}
public T next() {
synchronized (lock) {
if (len <= 0)
return null;
if (len == 1)
return list.get(--len);
int index = r.nextInt(len);
if (index == len - 1)
return list.get(--len);
T c = list.get(index);
list.set(index, list.get(--len));
return c;
}
}
}