多大数量级会出现哈希碰撞

简介: 写作目的今天在网上看到一个有意思的问题是多大的数据量会出现哈希碰撞?我当时的想法是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 {![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/46fe066444bd429b8762056191dade0c.png)
  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的时候会出现哈希碰撞


6.png


结论


10W5K左右的量级会出现哈希碰撞

目录
相关文章
|
6天前
|
设计模式 算法 Java
【数据结构和算法】无限集中的最小数字
这是力扣的2336题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。使用TreeSet和min变量来维护一个无限集合,保证集合的连续性。添加元素时,若元素大于等于min,则不添加;若元素小于min,则将其添加到TreeSet中。删除元素时,先判断TreeSet是否为空,若不为空,则从TreeSet中删除元素;若为空,则将min值加1。该算法能够高效地添加和删除元素,并保持集合的连续性。该算法还可以用优先队列(小根堆)+ hash表解题,比较优秀。
31 1
|
7月前
|
算法 测试技术 C++
C++算法:让数组不相等的最小总代价
C++算法:让数组不相等的最小总代价
|
10月前
|
存储 小程序 编译器
数据在内存中存储的现象
数据在内存中存储的现象
68 0
|
存储 NoSQL 测试技术
rediskey值内存消耗以及性能影响
rediskey值内存消耗以及性能影响
169 0
|
存储 算法 索引
哈希系列(空间换时间)
哈希系列(空间换时间)
|
存储 数据处理 C++
C++哈希应用-位图/布隆过滤器/海量数据处理(1)
C++哈希应用-位图/布隆过滤器/海量数据处理(1)
|
存储 人工智能 算法
C++哈希应用-位图/布隆过滤器/海量数据处理(2)
C++哈希应用-位图/布隆过滤器/海量数据处理(2)