从数组中获取随机且无重复的对象

时间:2014-08-10 06:25:03

标签: java performance random

我有五种颜色保存在一个数组中:

int[] colors=new int[]{Color.red,Color.black,Color.blue,Color.gray,Color.green};

现在我有很多项目,我希望为每个项目提供随机颜色,但有两个要求:

1从阵列中选择颜色缪斯

2一个项目的颜色与旁边的颜色不同。

int[] colors = getResources().getIntArray(R.array.category_color_array);

ArrayList<Integer> cs = new ArrayList<Integer>();
for (int k = 0; k < items.size(); k++) {
    if (k <= colors.length - 1) {
        cs.add(colors[k]);
    } else {
        cs.add(colors[k - colors.length]);
    }
}
Collections.shuffle(cs);
for (int i = 0; i < items.size(); i++) {
    items.get(i).color = cs.get(i);
}
cs.clear();

但我总是得到两个项目的重复颜色,如何解决?

顺便说一下,我的应用程序将运行在Andriod上,因此应该考虑性能。

1 个答案:

答案 0 :(得分:1)

你可以为位置i选择随机颜色,其中cs [i]!= cs [i - 1]

    ArrayList<Integer> cs = new ArrayList<Integer>();

    // assume we have 15 item 
    for (int k = 0; k < items.size(); k++) {

        int color = gerRandomColor(colors);

        //System.out.println(rand);
        while(k > 0 && color == cs.get(k - 1)){
            color = gerRandomColor(colors);
        }

        cs.add(color);
    }