MurmurHash 算法

embedded/2024/9/25 23:22:06/

简介

一种非加密型哈希函数

特点

特点:
1.快 ,MurMurHash3 比 MD5 快
2.低碰撞,MurMurHash3 128 位版本哈希值是 128 位的,跟 MD5 一样。128 位的哈希值,在数据量只有千万级别的情况下,基本不用担心碰撞。
3.高混淆,散列值比较“均匀”,如果用于哈希表,布隆过滤器等, 元素就会均匀分布。

使用

<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
@Testpublic void testCreateShortLink() {Random random = new Random();for (int i = 0; i < 100; i++) {int num1 = random.nextInt(10);int num2 = random.nextInt(1000000);int num3 = random.nextInt(1000000);String originalUrl = num1 + "xdclass" + num2 + ".net" + num3;String shortLinkCode = shortLinkComponent.createShortLinkCode(originalUrl);log.info("originalUrl:" + originalUrl + ", shortLinkCode=" + shortLinkCode);}}

长链转短链

/*** 创建短链* @param originalUrl* @return db编码+6位短链编码*/public String createShortLinkCode(String originalUrl){long murmur32 = CommonUtil.murmurHash32(originalUrl);//转62进制String shortLinkCode = encodeToBase62(murmur32);return code;}

工具类

/*** murmur hash算法* @param param* @return*/public static long murmurHash32(String param){long murmur32 = Hashing.murmur3_32().hashUnencodedChars(param).padToLong();return murmur32;}
private static final String CHARS =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";/*** 10进制转62进制* @param num* @return*/private static String encodeToBase62(long num) {//StringBuffer:线程安全; StringBuilder:线程不安全StringBuffer sb = new StringBuffer();do {int i = (int) (num % 62);sb.append(CHARS.charAt(i));num /= 62;// num = num/ 62;} while (num > 0);String value = sb.reverse().toString();return value;}

http://www.ppmy.cn/embedded/116874.html

相关文章

java8处理数据stream

以下是使用 Java 8 的 Stream API 进行优化后的方法&#xff1a; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; class Entity { String name; int pid; long time; long lastTime; pu…

LeetCode 每周算法 6(图论、回溯)

LeetCode 每周算法 6&#xff08;图论、回溯&#xff09; 图论算法&#xff1a; class Solution: def dfs(self, grid: List[List[str]], r: int, c: int) -> None: """ 深度优先搜索函数&#xff0c;用于遍历并标记与当前位置(r, c)相连的所有陆地&…

JAVA-StringBuilder和StringBuffer

一、认识String类 1.认识 String在Java中是字符串类型&#xff0c;但与其他类型不同。它是一个类&#xff0c;可以创建对象的类。与int、char等自待类型有些许不同。但它仍然是java提供的一种类型。 类中有4个属性&#xff0c;这里主要认识一下value属性。它是实际存放字符串…

倒排索引(反向索引)

倒排索引&#xff08;Inverted Index&#xff09;是搜索引擎和数据库管理系统中常用的一种数据结构&#xff0c;用于快速检索文档集合中的文档。在全文搜索场景中&#xff0c;倒排索引是一种非常高效的手段&#xff0c;因为它能够快速定位到包含特定关键词的所有文档。 1、基本…

【算法】贪心+堆排序实现大根堆及标准库容器类的融合使用

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

一种单目标A*算法设计与实现

一种单目标A*算法设计与实现 作者&#xff1a;吴屏珊 最近在学习简单的单目标A*算法&#xff0c;其中在CSDN上阅读到的一篇博文给了我很大启发&#xff0c;于是在该博文的基础上&#xff0c;笔者记录了一点自己对于A*算法的体会和感悟。原文链接 目录 文章目录 一种单目标A*…

【多线程】面试高频考点!JUC常见类的详细总结,建议收藏!

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 JUC是“Java Util Concurrency”的缩写&#xff0c;指的是Java并发工具包&#xff0c;它位于java.util.concurrent包及其子包中。JUC包提供了大量用于构建并发应用程序的工具和…

如何在openEuler上安装和配置openGauss数据库

本文将详细介绍如何在openEuler 22.03 LTS SP1上安装和配置openGauss数据库&#xff0c;包括数据库的启动、停止、远程连接配置等关键步骤。 1、安装 使用OpenEuler-22.03-LTS-SP1-x64版本的系统&#xff0c;通过命令行安装openGauss数据库。 1.1、确保系统软件包索引是最新…