package org.nutz.lang.random; /** * 根据一个数组随机产生对象,每个对象只会被取出一次。 当数组耗尽,则一直返回 null * * @author zozoh(zozohtnt@gmail.com) */ public class ArrayRandom<T> implements Random<T> { private T[] array; private Integer len; private java.util.Random r = new java.util.Random(); private Object lock = new Object(); public ArrayRandom(T[] array) { this.array = array; len = array.length; } public T next() { synchronized (lock) { if (len <= 0) return null; if (len == 1) return array[--len]; int index = r.nextInt(len); if (index == len - 1) return array[--len]; T c = array[index]; array[index] = array[--len]; return c; } } }