【问题标题】:How to pick two random items from a set? [duplicate]如何从一组中随机选择两个? [复制]
【发布时间】:2016-12-17 20:15:33
【问题描述】:

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

【问题讨论】:

标签: java


【解决方案1】:

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

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();

【讨论】:

  • 是的,完全符合我的情况
猜你喜欢
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 2021-12-14
相关资源
最近更新 更多