今天在网上看到一个有意思的问题是多大的数据量会出现哈希碰撞?我当时的想法是2的32次方,因此hascode是init类型的,哈哈。 还是可以写个demo实验一下的。真实答案是10W5K左右的量级会出现哈希碰撞
package HashCcollision;
import java.util.HashSet;
import java.util.Set;
/**
* @author chaird
* @create 2022-07-31 22:08
*/
public class App {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
int hashcode = 0;
// 10w
int size = 11 * 10000;
System.out.println("init :" + size);
for (int i = 0; i < size; i++) {
hashcode = new Object().hashCode();
if (set.contains(hashcode)) {
System.out.println("第" + i + "次出现了 哈希冲突");
} else {
set.add(hashcode);
}
}
System.out.println("finish :" + set.size());
}
}
如下图所示, 当数量量达到10W~11W的时候会出现哈希碰撞
10W5K左右的量级会出现哈希碰撞