【发布时间】:2012-03-30 21:26:07
【问题描述】:
我在java.util.List 中有 1000 个唯一对象,每个对象都引用一个图像,1000 个列表中的每个图像都是唯一的,现在我想将它们打乱,这样我就可以使用前 20 个对象并呈现他们给网站用户。
然后,用户可以单击“随机播放”按钮,然后我再次从头开始检索 1000 张图像并再次调用shuffle()。
然而,似乎在 1000 个图像对象中,我经常在 20 个图像选择之间一次又一次地看到相同的图像。
好像出了点问题,有什么更好的建议吗?
我的代码很简单:
List<String> imagePaths = get1000Images();
Collections.shuffle(imagePaths);
int i = 0;
for (String path: imagePaths) {
... do something with the path ...
i++;
if (i >= 20) break;
}
我知道Collections.shuffle() 分布良好:
例如见http://blog.ryanrampersad.com/2012/03/03/more-on-shuffling-an-array-correctly/
但是,我只是觉得在 1000 张图片中的 20 张图片中一遍又一遍地看到同一张图片的概率应该要小得多......
非常感谢您的意见。
【问题讨论】:
-
如果没有看到对所见内容的统计分析,就很难知道它是否异常。
-
我的猜测是您实际上已经多次获得相同的图像路径,或者实际上具有相同图像数据的多个图像路径。除此之外,这点信息很难说......
-
看看我的回答here,可能会有所帮助。也许你应该插入不同的
Random实现? -
@basZero:实际上,您应该不为每个
shuffle创建一个Random的新实例,除非您有强大的随机seed来源。否则,重复使用同一个。也许SecureRandom有好种子?
标签: java arrays collections random shuffle