如何从一组中挑选两个随机物品?

时间:2016-08-11 07:53:58

标签: java

给定一个集合X,使用java如何从中选择两个随机项目,以便我可以增加一个项目并同时减少另一个项目。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我检查集合的大小,然后随机选择两个"索引"在它下面。当然,并不是Java中的Set元素没有真正的索引(至少不是List拥有它们的意义,而是使用get(int)方法,但这种行为可以通过迭代Set并计算步数来模拟:

Set<Object> set = ...;
Random random = new Random(); // or some better RNG
int size = set.size();
int step1 = rand.nextInt(size - 1);
int step2 = rand.mextInt(size - step1);

Iterator<Object> iter = set.iterator();
for (int i = 0; i < step1 - 1; ++i) {
    iter.next();
}
Object rand1 = iter.next();

for (int i = 0; i < step2 - 1; ++i) {
    iter.next(); // Note, this is the SAME iterator!
}
Object rand2 = iter.next();