murmurhash java_默默hash(MurmurHash)

murmurhash java_默默hash(MurmurHash)MurmurHash 可以将一个字符串 hash 出一个碰撞率极低的 long 型数值 且效率很高 packagecom trs util importjava nio ByteBuffer importjava nio ByteOrder 根据字符串生成 long 型数据 id authoryush 2018 年 11 月 6 日上午 11 02 00 publicclassA

MurmurHash可以将一个字符串hash出一个碰撞率极低的long型数值,且效率很高

package com.trs.util;

import java.nio.ByteBuffer;

import java.nio.ByteOrder;

/

* 根据字符串生成long型数据id

* @author yush

* 2018年11月6日 上午11:02:00

*/

public class AssetKeyUtil {

/

*  MurMurHash算法,是非加密HASH算法,性能很高,

*  比传统的CRC32,MD5,SHA-1(这两个算法都是加密HASH算法,复杂度本身就很高,带来的性能上的损害也不可避免)

*  等HASH算法要快很多,而且据说这个算法的碰撞率很低.

*/

public static Long getMurMurHash(String key) {

ByteBuffer buf = ByteBuffer.wrap(key.getBytes());

int seed = 0x1234ABCD;

ByteOrder byteOrder = buf.order();

buf.order(ByteOrder.LITTLE_ENDIAN);

long m = 0xc6a4a7935bd1e995L;

int r = 47;

long h = seed ^ (buf.remaining() * m);

long k;

while (buf.remaining() >= 8) {

k = buf.getLong();

k *= m;

k ^= k >>> r;

k *= m;

h ^= k;

h *= m;

}

if (buf.remaining() > 0) {

ByteBuffer finish = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN);

// for big-endian version, do this first:

// finish.position(8-buf.remaining());

finish.put(buf).rewind();

h ^= finish.getLong();

h *= m;

}

h ^= h >>> r;

h *= m;

h ^= h >>> r;

buf.order(byteOrder);

return h;

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232384.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python写的我的世界源码+现成

    文章目录不想阅读代码者跳过正派活于话少今天第一次讲Python不要问我为什么之前不讲,就不讲~(假装自己学过python但是不讲)瞧,标题是什么,敢多说吗(我也不敢多说啊)效果图:源码(903行)from__future__importdivisionimportsysimportmathimportrandomimporttimefromcollectionsimportdequefrompygletimportimagefrompyglet.g

    2022年4月14日
    161
  • idea在方法上自动生成注释_idea中如何快速注释

    idea在方法上自动生成注释_idea中如何快速注释目录目录生成类注释生成类注解模板生成方法注释生成方法注解模板最近从eclipse转idea了,第一步当然是配置快捷键,模板等。但是!发生了一件贼蛋疼的事情,竟然一直找不到正确添加方法注释的方法!最后自己摸索到了,在此详细记录,供大家参考。本人用的ideaformac,可能快捷键不同,但是设置等肯定是相同的生成类注释打开PreferencesEditor->Fil

    2022年9月30日
    2
  • A股和B股的区别_b股是什么股票

    A股和B股的区别_b股是什么股票A股:正式名称是人民币普通股票。它是由我同境内的公司发行,供境内机构、组织或个人(不含台、港、澳投资者)以人民币认购和交易的普通股股票,我国A股股票市场经过几年快速发展,已经初具规模。.B股:正式名

    2022年8月2日
    11
  • docker镜像容器导出

    docker镜像容器导出1 docker 镜像 容器导出方式 dockersave IDor Namedockerex IDor Name2 save 和 export 区别 1 对于 DockerSave 方法 会保存该镜像的所有历史记录 2 对于 DockerExport 方法 不会保留历史记录 即没有 commit 历史 3 dockersave 保存的是镜像 image dockerexport 保存的是容器 container 4 dockerload 用来载入镜像包 dock

    2025年11月6日
    1
  • Java数字与字符串的转换

    Java数字与字符串的转换1 数字转字符串方法 1 使用 String 类的静态方法 valueOf 方法 2 先把基本类型装箱为对象 然后调用对象的 toString2 字符串转数字调用 Integer 的静态方法 parseInt

    2025年9月22日
    3
  • RNAseq数据作图_做RNAseq结果不稳定

    RNAseq数据作图_做RNAseq结果不稳定在RNA-seq项目中,常见的结果包括:火山图、韦恩图、聚类热图、log2(ratios)折线图、有向无环图、散点图、代谢通路图、蛋白互作图等。今天我们先来一起学习火山图、韦恩图、聚类热图和折线图的解读。1、火山图RNA-seq中,火山图(VolcanoPlot)显示了两个重要的指标:foldchange和校正后的pvalue,利用T检验分析出两样本间显著差异表达的基因后,以log2(f…

    2022年10月20日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号