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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WKT_WK是什么品牌

    WKT_WK是什么品牌WKT-概念WKT(Well-knowntext)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-knownbinar

    2022年8月4日
    8
  • c语言fsync函数,c – 如何在一个流上做fsync?

    c语言fsync函数,c – 如何在一个流上做fsync?不幸的是,查看标准没有提供basic_filebuf或任何basic_[io]?fstream类模板,以允许您提取底层的操作系统文件描述符(以fileno()为CstdioI/O的方式).也没有一个open()方法或构造函数将这样的文件描述符作为参数(这将允许您使用不同的机制打开文件并记录文件句柄).有basic_ostream::flush(),但是我怀疑这实际上并不调用fsyn…

    2022年5月23日
    39
  • python怎么换行输出的数字对齐_print语句输出换行,format格式化输出「建议收藏」

    print其实本来挺简单的一个函数,奈何每次用都忘记了怎么换行输出,所以想想算了还是自己做个记录,免得每次都要去查.print函数用法:print(value,…,sep=”,end=’\n’,file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.stdoutbydefault.Optiona…

    2022年4月15日
    163
  • POD POL_胖五详细介绍

    POD POL_胖五详细介绍主要为Pod资源的介绍,Pod的结构,定义,配置和启动的方法

    2022年8月12日
    8
  • 控制Tello无人机扫描条形码「建议收藏」

    控制Tello无人机扫描条形码「建议收藏」一直想玩无人机,之前租了一个大疆的发现禁飞。好在最近发现了Tello,买来过了一把瘾。顺便试了下集成条形码扫描功能。现在有很多仓储管理会用到无人机来扫码做库存盘点。Python3控制Tello无人机DJI的官方GitHub仓库里已经放了示例代码dji-sdk/Tello-Python。不过这份代码只能支持Python2.7,而且也好久无人维护。要在Python3上运行这份代码需要做些修改。首先获取源码:gitclonehttps://github.com/dji-sdk/Tello-Py

    2022年8月15日
    6
  • 三大(Chrome、Firefox、IE)webdriver下载地址

    三大(Chrome、Firefox、IE)webdriver下载地址目录三大浏览器webDriver下载地址三大浏览器webDriver下载地址webDriver下载地址。谷歌chromedriver下载地址:https://code.google.com/p/chromedriver/downloads/list火狐geckodriver下载地址:https://github.com/mozilla/geckodriver/releases/IEdriver下载地址:http://www.nuget.org/pa

    2022年9月2日
    28

发表回复

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

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