是否可以使用String作为实例Random的种子?



我有一个字符串值,我想初始化一个随机类使用字符串作为种子?

这是可能的吗?如果是,怎么做?

字符串不仅包含ASCII。我可以用任何utf-8符号

您可以使用String.hashCode的实现,区别在于使用long而不是int

static long stringToSeed(String s) {
    if (s == null) {
        return 0;
    }
    long hash = 0;
    for (char c : s.toCharArray()) {
        hash = 31L*hash + c;
    }
    return hash;
}

这样你得到一个long,但是当然有不同的String可以产生相同的种子。根据您使用的String作为输入,某些种子可能比其他种子出现的概率更高。

您可以对ascii值或utf-8符号进行处理,将它们全部写成数字,然后将它们加在一起。或者,如果你需要,你可以选择一个更高级的"哈希函数"的例子,参见以下维基百科页面:http://en.wikipedia.org/wiki/List_of_hash_functions

最新更新