hadoop in action 学习疑点

来源:互联网 发布:天池大数据竞赛 2016 编辑:程序博客网 时间:2024/06/05 10:37

一、在5.3 Creating a Bloom fi lter这一节中,有一个distribute的例子,其中一段代码如下:

protected int[] getHashIndexes(E obj) {
int[] indexes = new int[numHashFunc];
long seed = 0;
byte[] digest;
try {
MessageDigest md = MessageDigest.getInstance(“MD5”);
md.update(obj.toString().getBytes());
digest = md.digest();
for (int i = 0; i < 6; i++) {
seed = seed | (((long)digest[i] & 0xFF))<<(8*i);
}
} catch (NoSuchAlgorithmException e) {}
Random gen = new Random(seed);
for (int i = 0; i < numHashFunc; i++) {
indexes[i] = gen.nextInt(bitArraySize);
}
return indexes;
}

我一直不解为何要用Random,那样生成的indexes不是每次都不一样么,后来才知道:

来自(http://lehsyh.iteye.com/blog/646658/)

Random random = new Random();//默认构造方法

Random random = new Random(1000);//指定种子数字

在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。

实验了一下,的确是这样



原创粉丝点击