Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从arraylist中随机拾取唯一项_Java_Arraylist - Fatal编程技术网

Java 从arraylist中随机拾取唯一项

Java 从arraylist中随机拾取唯一项,java,arraylist,Java,Arraylist,假设我想从如下数组列表中选择5种随机颜色: static final List<Color> colors = new ArrayList<Color>(); static { colors.add(Color.RED); colors.add(Color.BLUE); colors.add(Color.GREEN); } 但是如果我想选择不同的独特颜色呢?所以说我选红色,我怎么能保证不再选红色;最好不要将其从列表中删除 编辑: 我发现了一些有

假设我想从如下数组列表中选择5种随机颜色:

static final List<Color> colors = new ArrayList<Color>();

static {
    colors.add(Color.RED);
    colors.add(Color.BLUE);
    colors.add(Color.GREEN);
}
但是如果我想选择不同的独特颜色呢?所以说我选红色,我怎么能保证不再选红色;最好不要将其从列表中删除

编辑:

我发现了一些有效的方法:

Color generatedColor = Theme.randomColor();
for (int i = 0; i < pie.segments.size(); i++) {
    if (generatedColor == pie.segments.get(i).getColor()) {
        generatedColor = Theme.randomColor();
        return;
    }
}
this.color = generatedColor;
Color-generatedColor=Theme.randomColor();
对于(int i=0;i
然而,有人建议我将它们全部删除,并在完成所有生成后重新添加,我应该选择哪种方法

编辑2:

洗牌后,我得到了以下结果:


谢谢!:)

使用
remove
方法,将对象返回到该位置,然后将其移除

然后,您的方法变成:

public static Color getRandomColor() {
    return colors.remove(random.nextInt(colors.size());
}

当列表大小为0时,请重新插入所有颜色。

尝试
集合。无序移动(列表)
并选择前N种颜色。你想这样做吗?我考虑过,但不是给它一个完整的类,我会尝试一下。你对“暴力强迫”有什么看法?e、 g我有一系列使用颜色的东西,我会生成一个颜色检查,如果它被使用过,如果它已经再生了?我从来没有听说过洗牌?我会调查一下:)--edit:我认为洗牌在这里是没有用的,洗牌正是你想要的。将其洗牌,然后选择第一个元素,然后选择第二个元素,依此类推。如果你不想让它修改你的数组,复制一个副本,然后洗牌。我认为删除每个元素没有那么有效。我猜别人提到的Shuffle
是一个更好的选择。+1虽然没有Shuffle那么有效,但这是一个最小的改变。以这个解决方案结束,是一个最小的麻烦。我遇到的大多数错误都是我自己的愚蠢。我真的不知道集合是如何工作的。Shuffle(List)工作的,但是如果我可以猜的话,每次使用此方法时,整个列表都会重新组合,例如使用当前元素到随机元素之间的交换。。。。这可能比简单地从列表中删除一个元素效率低得多。同样,使用此方法,您可以确保如果列表大小为N,则在调用get Random Color in times后,每个颜色都返回了i次
public static Color getRandomColor() {
    return colors.remove(random.nextInt(colors.size());
}