如何在数组Java的一部分上调用Collections.Shuffle

时间:2016-01-13 22:06:39

标签: java arrays

所以我有以下数组:

String [] randomList = new String [16];
    randomList[0]="Dog";
    randomList[1]="Dog";
    randomList[2]="Cat";
    randomList[3]="Cat";
    randomList[4]="Mouse";
    randomList[5]="Mouse";
    randomList[6]="Car";
    randomList[7]="Car";
    randomList[8]="Phone";
    randomList[9]="Phone";
    randomList[10]="Game";
    randomList[11]="Game";
    randomList[12]="Computer";
    randomList[13]="Computer";
    randomList[14]="Toy";
    randomList[15]="Toy";

我想只改变这个数组的前9个元素。我使用了以下代码,但它会整个数组。

Collections.shuffle(Arrays.asList(randomList));

我如何只将数组的一部分而不是整个事件洗牌?我正在制作一个非常简单的程序,所以我想继续使用Collections类,但欢迎所有解决方案。感谢

2 个答案:

答案 0 :(得分:10)

您可以使用List type's subList method获取List对象,其中包含原始列表中特定元素范围的视图。我没有对此进行测试,但我认为它应该可行:

Collections.shuffle(Arrays.asList(randomList).subList(startIndex, endIndex));

答案 1 :(得分:1)

您也可以尝试下面的内容。但是,templatetypedef建议的代码更清晰。 List<String> newList = new ArrayList<String>(); for(int i=0; i<randomList.size()-ValuePreferred; i++){ newList.add(randomList.get(i)); } Collections.shuffle(newList); randomList.removeAll(newList); newList.addAll(randomList);

另外,我听说数组中的子列表存在内存泄漏问题。不确定是否得到纠正。如果有人可以提供任何有用的信息,那就太棒了。请记住,在List之间专门调用value将导致IndexOutOfBoundsIssue()。应该处理。