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;

}

}

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180385.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JQuery安装与下载教程

    JQuery安装与下载教程jQuery安装与下载JQuery是一个javaScript库,是一个轻量级的”写的少,做的多”的JavaScript库。jQuery极大地简化javaScript编程–juery相比js优点:jquery的onload加载事件速度更快,并且多个加载并行 【jq绑定事件都是使用的事件函数,不需要加on】; js的onloa…

  • ELK实践

    ELK实践

  • [GBA ROM列表]不断补完中……

    [GBA ROM列表]不断补完中……出处:http://www.ezflash.cn/vbb/showthread.php?s=3a42901b8c2aacb56a02e61f690b8a05&threadid=14&perpage=15&pagenumber=10001-F-Zero(J)(最高时速)(J)RCG320002-SuperMarioAdvance(J)(超级马里奥A)(J)ACT32000

  • CAP定理整理_craig定理

    CAP定理整理_craig定理CAP定理是分布式系统设计中最基础、最关键的理论,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得CAP的定义Consistency(一致性):“allnodesseethesamedataatthe…

    2022年10月30日
  • CPU流水线技术演进「建议收藏」

    CPU流水线技术演进「建议收藏」一.三级线性流水线每个流水级的结构是:逻辑电路+寄存器我们可以将流水线往下细分,使得各个流水级足够小(CPU执行时间少),就可以通过提高系统时钟频率来提高CPU的处理速度。二.多级线性流水线(这里以5级为例)注意:我们把5级以上的流水线称为超流水线结构。三.muti-多级线性流水线(这里以5级为例)四.多级非线性流水线(乱序执行部件)五.超线程处理器多级非线性流水线(虚拟处理器共用乱序执行部件)拥有超线程的处理器将两个虚拟的处理器暴露给共享的乱..

  • Python学习–02输入和输出、运算符

    Python学习–02输入和输出、运算符

发表回复

您的电子邮箱地址不会被公开。

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