java重复的随机值

时间:2013-03-06 21:06:50

标签: java random duplicates

我需要从ArrayList中选择几个随机值,但值不能重复。使用下面的代码,我只需选择随机值,但它们可以复制。

    for (int i = 0; i < 5; i++) {

        index = random.nextInt(menuItems.size());
        HashMap<String, String> urls = new HashMap<String, String>();

        urls.put("Value", menuItems.get(index).get(KEY_URL));

        randomitems.add(urls);

    }

4 个答案:

答案 0 :(得分:7)

如果您不需要按照特定顺序保留menutItems,则只需将其随机播放并采取前5项:

Collections.shuffle(menuItems);
for (int i = 0; i < 5; i++) {
    HashMap<String, String> urls = new HashMap<String, String>();
    urls.put("Value", menuItems.get(i).get(KEY_URL));
    randomitems.add(urls);
}

如果您确实需要保留menuItems,可以先制作副本。

答案 1 :(得分:0)

是的,随机性的性质可能会再次给出相同的数字。

要摆脱这种情况,你必须手动检查以前收到的新随机数,然后抛出你不想要的所有内容。

答案 2 :(得分:0)

复制你的清单,所以你不要弄乱你的旧清单

List<Object> randomList = new ArrayList<Object>(oldList);

选择一个

int index = new Random().nextInt(randomList.size());
Object randomObj = randomList.get(index);
randomList.remove(index);

因此每次选择一个,你都不能再选一个。

答案 3 :(得分:0)

我在这里回答你问题的标题。我使用Set来确保每个数字都是唯一的,我不会停止添加数字,直到它等于我想要的大小。然后我将其转换为List

package com.sandbox;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

public class Sandbox {

    private static final int TOTAL_NUMBERS_I_WANT = 5;

    public static void main(String[] args) {
        Random random = new Random();
        Set<Integer> nonRepeatingRandomNumbers = new HashSet<Integer>();
        while (nonRepeatingRandomNumbers.size() < TOTAL_NUMBERS_I_WANT) {
            nonRepeatingRandomNumbers.add(random.nextInt());
        }
        List<Integer> result = new ArrayList<Integer>(nonRepeatingRandomNumbers);
        System.out.println(result);
    }
}