1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 哈希碰撞率(hash collision)实测

哈希碰撞率(hash collision)实测

时间:2019-02-23 07:25:10

相关推荐

哈希碰撞率(hash collision)实测

测试代码如下:

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);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。