java的随机值是不重复(java random values that not repeat)

2019-10-17 18:58发布

我需要挑选一些从随机值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);

    }

Answer 1:

如果您不需要保留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 ,因为它是你可以先制作一个拷贝。



Answer 2:

是的,这是随机性的性质,同样的数量可能会再次给出。

为了摆脱,你必须手动检查与先前收到的人在新的随机数,并抛出所有你不想要的。



Answer 3:

复制你的列表,所以你不要弄乱你的旧列表

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

选一个

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

所以每次选择一个时间,你不能再挑选一个。



Answer 4:

我在这里回答你的问题的称号。 我用一个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);
    }
}


文章来源: java random values that not repeat