java.util.Collections.shuffle(列表列表)可以按照“发送被洗牌”的顺序返回列表吗?

时间:2012-09-05 01:35:44

标签: java arrays collections arraylist shuffle

docs说“所有排列的发生概率大致相等”。但我不知道这是否包括返回相同排序的(但很小)的可能性。我有一个方法(见下文),其中在两次测试运行期间,列表以原始顺序返回,也许..其他因素可能是错误的,例如可以选择anagram并且结果是单词。词典大约300,000字,所以我已经将方法改为更合适的测试,以防止这种情况发生。 方法:

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;
}

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

1 个答案:

答案 0 :(得分:10)

是的,原始订单可能会被保留,但正如您所说,对于较长的列表,这种可能性不大。尝试仅包含两个元素的列表,看看是否会发生这种情况。