前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >HashMap_java的hashcode方法

HashMap_java的hashcode方法

作者头像
全栈程序员站长
发布于 2022-11-02 08:21:28
发布于 2022-11-02 08:21:28
1870
举报

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
freebsd分片重组算法_mongodb分片算法
首先是hash函数,在Jedis中有两种Hash算法可供选择,分别是MurMurHash和MD5. 按照Jedis的说法MurmurHash更快,效果更好些。
全栈程序员站长
2022/11/08
1.1K0
一致性Hash原理与实现
互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢? 这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过mysql、nginx等开源软件,通过架构和低成本的服务器搭建千万级别的用户访问系统。 怎么样搭建一个好的系统架构,这个话题我们能聊上个七天七夜。这里我主要结合Redis集群来讲一下一致性Hash的相关问题。
程序员小强
2021/09/15
3770
算法:一致性哈希算法HASH原理及实践
互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢? 这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过mysql、nginx等开源软件,通过架构和低成本的服务器搭建千万级别的用户访问系统。 怎么样搭建一个好的系统架构,这个话题我们能聊上个七天七夜。这里我主要结合Redis集群来讲一下一致性Hash的相关问题。
Freedom123
2024/03/29
8210
算法:一致性哈希算法HASH原理及实践
java.nio.heapbytebuffer_javastringbuffer和string区别
在Java的Socket编程中,若使用阻塞式(BIO),则往往通过ServerSocket的accept()方法获取到客户端Socket之后,再使用客户端Socket的InputStream和OutputStream进行读写。Socket.getInputstream.read(byte[] b)和Socket.getOutputStream.write(byte[] b)的方法中的参数都是字节数组。这种阻塞式的Socket编程显然已经远远不能满足目前的并发式访问需求。
全栈程序员站长
2022/11/15
3530
java.nio.heapbytebuffer_javastringbuffer和string区别
Java NIO字节缓存区【源码笔记】
@1 newBuffer拥有了与buffer相同的mark、position、limit
瓜农老梁
2020/01/17
7060
Java NIO字节缓存区【源码笔记】
Murmur下载_highwayhash
* The murmur hash is a relative fast hash function from
全栈程序员站长
2022/11/02
3110
Java NIO读书笔记
NIO的作用就是改进程序的性能。由于有时候程序的性能瓶颈不再是CPU,而是IO。这时候NIO就派上用场了。NIO的原理就是尽量利用系统底层的资源来提高效率,比方利用DMA硬件减小CPU负荷,利用操作系统的epoll机制避免线程频繁切换。通过底层资源提高系统的吞吐量。
全栈程序员站长
2022/07/13
2480
一致性哈希负载均衡算法的探讨
一致性哈希算法在很多领域有应用,例如分布式缓存领域的 MemCache,Redis,负载均衡领域的 Nginx,各类 RPC 框架。不同领域场景不同,需要顾及的因素也有所差异,本文主要讨论在负载均衡中一致性哈希算法的设计。
kirito-moe
2019/03/15
2.5K0
mina的编码和解码以及断包的处理,发送自定义协议,仿qq聊天,发送xml或json
最近一段时间以来,mina很火,和移动开发一样,异常的火爆。前面写了几篇移动开发的文章,都还不错,你们的鼓励就是我最大的动力。好了,废话少说。我们来看下tcp通讯吧。 tcp通讯对于java来说是很简单的。就是socket,也就是大家常说的套接字。大家不要把它看的很难。说白了tcp通讯其实就是数据流的读写。一条输入流,一条输出流。分别复杂发消息和接收消息。 明白了这些,ok,我们来看看我写的例子吧。先看服务器端的测试类的源码:
业余草
2019/01/21
2K0
mina的编码和解码以及断包的处理,发送自定义协议,仿qq聊天,发送xml或json
ServerFrame::HashMap VS stl::unordered_map-性能探究之旅
作者:池育龙 1. 引言 突然就对项目中的HashMap有了强烈的好奇心,这个HashMap的实现够高效吗,和 std::unordered_map 的效率比较性能如何? 他们的插入效率、查找效率、空
serena
2017/09/12
1.5K0
ServerFrame::HashMap VS stl::unordered_map-性能探究之旅
一致性哈希算法及其实现
1,一致性哈希算法诞生的背景 技术和业务是相互推动,共同前进的。一致性哈希算法的产生也源于业务的需求。随着业务的增长,一台单机 已经不能满足业务的需要,分布式架构应运而生。分布式环境下,多台机器需要协同作业,如果保证数据在分布式 环境下的一致性,就成为了亟待解决的问题。一致性哈希算法,就是为了解决多台机器,在动态增删的情况下,能够 最大限度地保证信息的一致性。 一致性哈希算法是一种分布式哈希算法,设计目标是为了解决互联网中的热点(Hot spot)问题。一致性哈希算法 设计初衷和CARP十分类似。CARP,即Composition/Aggregation Principle,组合/聚合原则。CARP的目标之一,是为 了改善服务的可用性。在多台服务器环境下,进行故障转移,提高系统的可用性。一致性哈希修正了CARP使用的简单 哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。
全栈程序员站长
2022/09/18
5380
一致性(连续性)hash算法(Consistent hashing)一致性(连续性)hash算法(Consistent hashing)
Consistent hashing is a scheme that provides hash table functionality in a way that the addition or removal of one slot does not significantly change the mapping of keys to slots.
一个会写诗的程序员
2018/08/17
9871
一致性(连续性)hash算法(Consistent hashing)一致性(连续性)hash算法(Consistent hashing)
Hashmap源码解析
做什么都怕进入狗咬尾巴的怪圈,上次看hashmap源码还是2012年,这次出去面试时被问到了hashmap的问题,整体思路还是记得的,巴拉巴拉一堆。回来再看一下源码,温习一下
码农戏码
2021/03/23
3510
死磕Java之聊聊HashMap源码(基于JDK1.8)
HashMap是Java程序员使用频率最高的数据结构之一。另外,JDK1.8对HashMap底层的实现进行了优化,如引入红黑树的数据结构以及扩容的优化等等来提高性能。本文结合JDK1.8的源码,探讨HashMap的结构实现和功能原理。
haifeiWu
2018/09/11
6480
死磕Java之聊聊HashMap源码(基于JDK1.8)
java:bytes[]转long的三种方式
该文介绍了Java中byte、byte数组和int、long之间的转换方法。包括使用ByteBuffer、ByteOrder、Integer.BYTES、Long.BYTES、UTF-8、Integer.MAX_VALUE和Long.MAX_VALUE等方法。
10km
2018/01/03
5.8K0
hogwarts sorting hat_huge squares
1. 概述 murmurhash是 Austin Appleby于2008年创立的一种 非加密hash算法,适用于基于hash进行查找的场景。murmurhash最新版本是MurMurHash3,支持 32位、64位及128位值的产生。 murmurhash标准使用c++实现,但是也有其他主流语言的支持版本,包括:perl、c#、ruby、python、java等。murmurhash在多个开源项目中得到应用,包括libstdc、libmemcached 、nginx、hadoop等。
全栈程序员站长
2022/09/27
4520
「高并发通信框架Netty4 源码解读(四)」NIO缓冲区之字节缓冲区ByteBuffer详解
非字节类型的基本类型,除了布尔型 3都是由组合在一起的几个字节组成的。这些数据类型及其大小总结在下表中
源码之路
2020/09/04
7140
「高并发通信框架Netty4 源码解读(四)」NIO缓冲区之字节缓冲区ByteBuffer详解
java bytebuffer flip_java string转byte
这是一篇转载的博客我还没有来得及进行验证,放在这里只是为了以后自己方便查看,如有错误的地方还请以评论的方式告知,我会进行改正。
全栈程序员站长
2022/11/09
8850
从0到1用java再造tcpip协议栈:架构重建,完整实现ping应用
在原先代码设计中,我们为了方便,喜欢在一个模块中组织数据包的协议头,然后将要发送的数据融合在一起,并调用网卡将数据发送出去,这种偷懒的做法将多种逻辑融合在一起。这种做法一旦遇到复杂的数据发送需求时,系统逻辑的复杂性会呈现出爆炸性的增长,最后超出我们的控制范围。
望月从良
2019/03/04
6760
从0到1用java再造tcpip协议栈:架构重建,完整实现ping应用
murmurhash算法_自我介绍的方式
加密哈希函数旨在保证安全性,很难找到碰撞。即:给定的散列h很难找到的消息m;很难找到产生相同的哈希值的消息m1和m2。
全栈程序员站长
2022/11/07
2.6K0
murmurhash算法_自我介绍的方式
推荐阅读
相关推荐
freebsd分片重组算法_mongodb分片算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文