HashMap_java的hashcode方法

HashMap_java的hashcode方法MurmurHash可以将一个字符串hash出一个碰撞率极低的long型数值,且效率很高packagecom.trs.util;importjava.nio.ByteBuffer;importjava.nio.ByteOrder;/***根据字符串生成long型数据id*@authoryush*2018年11月6日上午11:02:00*/publicclassAssetKeyU…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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/180385.html原文链接:https://javaforall.net

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


相关推荐

  • 切蛋糕(贪心 or 优先队列)

    切蛋糕(贪心 or 优先队列)

    2021年5月26日
  • Linux下文件搜索、查找、查看命令

    Linux下文件搜索、查找、查看命令Linux下文件搜索、查找、查看命令1、最强大的搜索命令:find一、根据文件或目录名称搜索二、根据文件大小搜索三、根据所有者和所属组搜索四、根据时间属性搜索五、根据文件类型或i节点搜索六、组合条件搜索  2、在文件资料中查找文件:locate  3、搜索命令所在的目录及别名信息:which 4、搜索命令所在的目录及帮助文档路径:whereis5、在文件…

    2022年7月26日
  • latex中参考文献怎么弄进去_论文中的参考文献怎么标注右上角

    latex中参考文献怎么弄进去_论文中的参考文献怎么标注右上角参考文献常见问题集1.请问如何将参考文献的计算器置零,然后再计数,格式大致是这样:1文12文2…1文12文2我是这样实现的:beginthebibliography99endthebibliography……beginthebibliography9999endthebibliography我的文本实在ScienticWorkplace中编辑的,建议你也使用这个软件,很…

    2022年9月9日
  • java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]

    java byte转中文乱码_java byte转string 涉及到字节流中有中文[通俗易懂]最近遇到一个问题,我用java写了一个客户端通过socket向服务器端发送消息,发送的内容是字节流,编码格式是GBK,服务器在收到消息后,如果格式正确,会返回固定的消息格式,同样也是字节流,编码格式也是GBK。现在问题来了,我怎么把字节流转换为字符流,当然是要能显示出中文。于是上网搜了一下,找到一篇博客,网址如下:http://bbs.csdn.net/topics/391939108,代码如下:…

    2022年6月15日
  • md5加密规则[通俗易懂]

    md5加密规则[通俗易懂]关于MD5加密  MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:  MD5(tanajiya.tar.gz)=0ca175b9c0f726a831d895e269332461  这就是

    2022年7月16日
  • Linux用ps命令查找进程PID再用kill命令终止进程的方法「建议收藏」

    Linux用ps命令查找进程PID再用kill命令终止进程的方法「建议收藏」随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)使用linux操作系统,难免遇到一些软件”卡壳”的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要killxxx即可,这里xxx代表与此软件运行相关…

    2022年10月20日

发表回复

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

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