我一直在寻找一种简单的 Java算法来生成伪随机字母数字字符串.在我的情况下,它将被用作一个唯一的会话/密钥标识符,它"很可能"在500K+生成过程中是唯一的(我的需求实际上并不需要更复杂的东西).
理想情况下,我可以根据我的唯一性需求指定长度.例如,生成的长度为12的字符串可能看起来像"AEYGF7K0DM1X".
我需要随机调整以下数组:
int[] solutionArray = {1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1};
Run Code Online (Sandbox Code Playgroud)
这有什么功能吗?
我正在寻找一种有效的算法,可以在一个范围内产生随机值,而不需要重复.
在伪代码中:(在Rand类中)
Rand(long from, long to) {
this.from = from;
this.to = to;
// ...
}
long getNumber() {
// returns a random number in the [from, to] range
// which has never been returned before
}
Run Code Online (Sandbox Code Playgroud)
用法:
Rand r = new Rand(1, 100000000);
long x = r.getNumber();
long y = r.getNumber();
...
Run Code Online (Sandbox Code Playgroud)
从r.getNumber()返回的数字应始终与先前返回的数字不同.
当然,如果to - from + 1返回数字,算法应该重新开始(或者错误 - 不管怎么说都不重要).
注意,范围可能非常大,因此随机排列的数组(最初包含[from, to]数字)可能会溢出存储器.