所以我有以下数组:
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类,但欢迎所有解决方案。感谢
答案 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()。应该处理。