Java 从另一个数组生成随机字符串数组。

Java 从另一个数组生成随机字符串数组。,java,arrays,Java,Arrays,我试图从另一个数组中创建一个随机颜色数组 String [] colors = new String[6]; colors[0] = "red"; colors[1] = "green"; colors[2] = "blue"; colors[3] = "yellow"; colors[4] = "purple"; colors[5] = "orange"; 这是我目前的阵列。我想用其

我试图从另一个数组中创建一个随机颜色数组

 String [] colors = new String[6];
         colors[0] = "red";
         colors[1] = "green";
         colors[2] = "blue";
         colors[3] = "yellow";
         colors[4] = "purple";
         colors[5] = "orange";
这是我目前的阵列。我想用其中的4种颜色制作一个新的阵列,没有重复


到目前为止,我知道如何制作随机数组;然而,我不知道如何有效地处理副本

我强烈建议您不要为此使用数组。将您需要的内容添加到集合中,它将为您处理重复管理。如果需要,您可以随时转换回数组。

听起来您需要一个集合。一套是用来消除重复的

Set<String> set = ...
for(String s : "a,b,c,d,e,f,d,e,c,a,b".split(","))
    set.add(s);

此集合将具有所有唯一的字符串。

您可以从颜色中随机选择条目,并将它们添加到集合中,直到集合具有四个元素:

Set<String> randomStrings = new HashSet<String>();
Random random = new Random();
while( randomStrings.size() < 4) {
    int index = random.nextInt( colors.length);
    randomStrings.add( colors[index]);
}

将它们添加到LinkedList中,并从0到大小之间的随机索引中删除。您几乎没有办法实现这一点。您可以从0,1,2,3,4,5中取消对数字列表的排序,并在取消排序后获得前4个数字。我所说的不排序是指将它们洗牌。可以随机删除其中一个元素。您可以继续将它们添加到集合中,尽管最终将它们全部添加可能需要一些时间。循环并添加到哈希集,直到哈希集的大小为4将是近似的。我强烈建议Knuth的洗牌算法,它为洗牌提供了非常好的随机性。你可以选择你选择的数据结构来删除DUP。这个问题每周会被问5次——如何在不替换的情况下进行随机选择。请花点时间搜索答案。这是一种完全非Java的编程方式。看起来更像lisp/clojure。拿些序列片走吧@SotiriosDelimanolis它使用java.lang中的方法,确实得到了更多的java;但是你必须做到不可替换,这是不可替换的。这是一套。
Random colors: [orange, red, purple, blue]
List<String> colourList = new ArrayList<String>(Arrays.asList(colors));
Collections.shuffle(colourList);
return colourList.subList(0,4).toArray();