有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组可以用于java。util。收藏。shuffle(List List)返回列表的顺序与“发送要洗牌”的顺序相同?

docs表示“所有置换都以近似相等的可能性发生。”但我不知道这是否包括退回相同订单的可能性(无论多么小)。我有一个方法(见下文),在两次测试运行期间,列表可能会以原始顺序返回。。其他因素可能也有问题,比如选择了一个字谜,结果是一个单词。这个词库大约有30万个单词,所以我把这个方法改成了一个更合适的测试,以防止出现这种情况。 方法:

private static char[] nextScrambledWord(int wordLength) {

    String word;
    do {
        word = "ABCDEF"; //TODO Get a word from lexicon
    } while(word.length() != wordLength);

    ArrayList<Character> temp = new ArrayList<Character>(wordLength);
    for(int i = 0; i < wordLength; i++) {
        temp.add(word.charAt(i));
    }

    Collections.shuffle(temp);

    char[] result = new char[wordLength];
    for(int i = 0; i < wordLength; i++) {
        result[i] = temp.get(i);
    }
    return result;
}

我对这种方法本身也很好奇。如果有人对如何改进这一点有建议,请随时分享。基本上,该方法将从一个集合中提取字长的单词,并返回洗牌结果的字符数组。我没有轮询一个已知长度的单词,而是考虑根据单词长度将词典分成多个集合


共 (1) 个答案

  1. # 1 楼答案

    是的,有可能保留原始顺序,但正如您所说,对于较长的列表,这不太可能。尝试一个只有两个元素的列表,看看会发生什么