样本数 1万 10万 100万 1000万 1亿
碰撞率1 0.00000002   0.00000033   0.00003769 0.00363519  0.29502696 
碰撞率2 0.00000001 0.00000051 0.00003808 0.00364375 0.2949834
碰撞率3 0.00000001 0.0000005 0.00003818 0.00363753 0.29490623

测试代码如下:


import cn.hutool.core.codec.Base64;
import cn.hutool.core.math.MathUtil;
import cn.hutool.core.util.StrUtil;import java.math.BigDecimal;
import java.text.DecimalFormat;public class HashCollision {public static void main(String[] args) {test();test();test();}private static void test(){System.out.println("test");long nums = 100000000;long s = System.currentTimeMillis();BitMap bitMap = new BitMap();long collisionNum = 0;for (int i = 0; i < nums; i++) {String uid = getUID();int code = uid.hashCode();if (bitMap.put(code)) {collisionNum++;}if (i+1 == 10000 || i+1 == 100000 || i+1 == 1000000 || i+1 == 10000000 || i+1 == 100000000) {DecimalFormat df = new DecimalFormat();df.setMaximumFractionDigits(10);String rate = df.format(collisionNum / (0.0 + nums));
//                System.out.println("collision  rate "+(i+1)+" = " + rate);System.out.print(rate+"\t");}}System.out.println();long t = System.currentTimeMillis() - s;System.out.println("t = " + t);}public static String getUID() {long[] longs = new long[]{Double.doubleToLongBits(Math.random()),Double.doubleToLongBits(Math.random()),Double.doubleToLongBits(Math.random())};byte[] bytes = longArrayToByteArray(longs);String encode = Base64.encode(bytes);return encode;}public static byte[] longArrayToByteArray(long[] longs) {byte[] bytes = new byte[longs.length * 8];for (int i = 0; i < longs.length; i++) {for (int j = 0; j < 8; j++) {bytes[i * 8 + j] = (byte) (longs[i] >>> j);}}return bytes;}}
public class BitMap {byte[] data = new byte[0x20000000];public boolean put(int code) {int indexInArray=code >>> 8;byte byteInArray = data[indexInArray];int indexInByte = code & 7;int bitValue = byteInArray >>> indexInByte & 1;data[indexInArray] = (byte) (byteInArray | (1 << indexInByte));return bitValue == 1;}public void clear(){for (int i = 0; i < data.length; i++) {data[i]=0;}}public static void main(String[] args) {BitMap bitMap = new BitMap();int code="111".hashCode();boolean b = bitMap.put(code);System.out.println("b = " + b);b = bitMap.put(code);System.out.println("b = " + b);}
}

哈希碰撞率(hash collision)实测相关推荐

  1. 哈希碰撞(hash collision)

    优秀的密码学课 https://classroom.udacity.com/courses/cs387/lessons/48683850/concepts/487362180923 # HW2-5 V ...

  2. 纸上谈兵: 哈希表 (hash table)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! HASH 哈希表(hash table)是从一个集合A到另一个集合B的映射(map ...

  3. Hash Collision DoS 攻击

    Hash Collision DoS事件及影响 Hash Collision DoS能让受攻击的服务器变得巨慢无比. 这不是因为服务器的编码原因或是疏忽造成的,而是程序语言自身的问题,Hash Col ...

  4. 哈希(Hash)的详细介绍

    1. Hash 的概念 ~~~~~~~        Hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的 输入 (又叫做预映射pre-image)通过散列算法变换成固定长度的 输出 ,该输出 ...

  5. 哈希(Hash)算法是一种单向密码体制(它是一个从明文到密文的不可逆的映射只有加密过程没有解密过程)

    https://www.cnblogs.com/xiaojq/p/11109634.html 简单解释:哈希(Hash)算法,即散列函数.它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只 ...

  6. Java集合—哈希(hash)表

    原文作者: 原文地址: 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我 ...

  7. 嵌套循环连接(Nested Loops), 合并联接(Merge), 哈希联接(Hash)的适用情况

    1.嵌套循环连接(Nested Loops)适用范围 两个表, 一个叫外部表, 一个叫内部表. 如果外部输入非常小,而内部输入非常大并且已预先建立索引,那么嵌套循环联接将特别有效率. 关于连接时哪个表 ...

  8. 哈希(hash)理解

    转载自https://www.cnblogs.com/mingaixin/p/4318837.html 一.什么是哈希?(一种更复杂的映射) Hash,一般翻译做"散列",也有直接 ...

  9. 解决哈希(hash)冲突的方法

    解决哈希(hash)冲突的方法 当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时.冲突就难免会发生.另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记 ...

  10. 计算与数据结构篇 - 哈希算法 (Hash)

    计算与数据结构篇 - 哈希算法 (Hash) 哈希算法的定义和原理非常简单,基本上一句话就可以概括了.将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之 ...

最新文章

  1. SSM开发 | 配合Mybatis,通过泛型实现 BaseService ,抽象增改删查方法
  2. selenium自学笔记---ecshop购买脚本 xpath定位元素(下拉框,单选框)
  3. 快速构建Windows 8风格应用13-SearchContract构建
  4. python数据结构与算法13_python 数据结构与算法 (13)
  5. python重载模块_Python 3.0中重载模块
  6. 实时音频编程(二):实践与技巧
  7. python由编译器将源程序转化为机器语言_python初识
  8. ubuntu server 18.04 和 20.04 安装 RabbitMQ
  9. jquery中css()与animate()
  10. 使用jdk1.8 新特性stream实现多级分类
  11. Linux常用命令大全 阶段性总结(二)
  12. Sql server2005 char/varchar/text和nchar/nvarchar/ntest的区别
  13. 前端花瓣飘落特效代码
  14. macbook配置java环境变量_Mac系统中如何配置JDK环境变量?Mac中JDK环境变量配置教程...
  15. 数学建模python实现基础编程练习4
  16. 半小时漫画中国史 -- 读书摘记
  17. PPAPI插件的全屏切换处理
  18. 如何再UOS/Ubuntu中创使用ufw设置防火墙
  19. 【学习笔记】信息系统项目监理“四控三管一协调”以及监理工作的分类和监理单位的作用
  20. ORA-12034: materialized view log on SCOTT.T_ROWID younger than last refresh

热门文章

  1. 配置史上最好用的Vim
  2. 物联网仪表ADW300接入ONENET平台介绍
  3. Java中的并发编程
  4. Facebook、Twitter、LinkedIn分享
  5. 开发使用的前端框架,建议收藏
  6. arm cef3 linux 编译_【学习笔记】CEF Linux编译
  7. Linux 标准输入、标准输出、错误输出
  8. 大数据日知录——大数据是什么?(一)
  9. 安装lodop插件后仍然无法打印_打印机迷惑行为:打印一半
  10. 数据结构——队列 c++详解