【发布时间】:2017-03-23 06:46:32
【问题描述】:
有一个数字数组,我想用随机生成器随机选择它的每个索引。随机生成器避免在已选择的索引上出现无用循环的最佳实践是什么?到目前为止,我使用一个 ArrayList 来存储已经选择的那些,但我觉得最终这个算法最终会有很多浪费的循环。代码如下:
Random r = new Random();
ArrayList<Integer> found = new ArrayList<Integer>();
while(notAllPassed){
int prediction = r.nextInt(sizeOfArray);
if(!found.contains(prediction){
found.Add(prediction);
//Do stuff
}
}
【问题讨论】:
-
1.建立索引列表。 2. 洗牌。
-
稍微扩展一下@MarkoTopolnik 所说的内容(以防不明显)。搜索洗牌算法。
-
@markbernard 不需要。
Collections.shuffle() -
也可以使用HashSet来存储随机数,而不是先存储在ArrayList中
-
@MarkoTopolnik LOL,参加了 Collections 课程很多次,但从未注意到这一点。