【问题标题】:How to call Collections.Shuffle on only part of an array Java如何仅在数组 Java 的一部分上调用 Collections.Shuffle
【发布时间】:2016-01-13 22:06:39
【问题描述】:

所以我有以下数组:

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 类,但是欢迎所有解决方案。谢谢

【问题讨论】:

标签: java arrays


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您也可以尝试以下方法。但是,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()。应该处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-23
      • 2016-06-15
      • 2022-01-08
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多