我正在尝试在Java中创建一个不重复其输出的Random类的子类,这是我到目前为止所拥有的...
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
public class NonRepetitiveRandom extends java.util.Random {
private Set<Integer> noUseInts = new CopyOnWriteArraySet<Integer>();
private static final long serialVersionUID = 1L;
@Override
protected int next(int bits) {
int i;
for (i = super.next(bits); noUseInts.contains(i); i = super.next(bits))
;
noUseInts.add(i);
return i;
}
}
没事吗?我需要添加任何东西吗?我最初尝试使用与上面相同的模型覆盖每个next *方法,但在注意到下一个方法本身在所有next *方法中使用后,我试图单独覆盖它。
注意: shuffling方法不起作用,因为它会创建一个完整列表并在每次需要值时将其随机播放。此外,如果范围很宽并且根本没有指定范围,则不实用。事实上,这种方法的唯一用例是当我已经有一个清单时。总之,非重复随机数发生器是最实用的解决方案。
答案 0 :(得分:0)
看起来你的代码会产生你想要的输出。 但是,如果您计划将其用于许多代随机数,则必须搜索以查找下一个随机数的参数空间将继续减少。天真地,每次平均生成下一个随机数需要更长的时间,所以如果要生成许多数字,请注意这一点。