Java学习笔记-XXH3哈希算法

XXH3是由Yann Collet设计的非加密哈希算法,属于XXHash系列的最新变种,专注于极速性能与低碰撞率,适用于对计算效率要求极高的场景。
极速性能
  • 在RAM速度限制下运行,小数据(如 1-128 字节)处理可达纳秒级,吞吐率高达 0.24--0.71 GB/s。
  • 大数据(如 100KB)处理可在微秒级完成,性能远超传统哈希算法(如 MD5、SHA-1)。
确定性输出
  • 所有平台(little/big endian)对相同输入生成一致的哈希值,确保跨环境兼容性。
多平台优化
  • 支持 SSE2、AVX2 等指令集加速,适配不同硬件架构以最大化性能。
使用
  • Python可以提供第三方库的支持,相关的使用也比较简单,只需要安装第三方库即可。

    • pip install xxhash
    • 简单的几个使用示例如下:
    python 复制代码
    from xxhash import xxh3_64_intdigest
    from xxhash import xxh3_128_intdigest
    from xxhash import xxh3_128_hexdigest
    	
    MAX_INT64 = sys.maxsize  # (1 << 63) - 1
    
    def xxh3_64_digest_int(*args: str) -> int:
        return xxh3_64_intdigest("".join(args))
    
    def xxh3_128_digest_int(*args: str) -> int:
        return xxh3_128_intdigest("".join(args))
    
    def xxh3_128_digest_hex(*args: str) -> int:
        return xxh3_128_hexdigest("".join(args))
  • Java同样提供了第三方库的支持,只需要引入相关的依赖包。

    • 引入依赖。开源提供的依赖还是挺多的,比如zero-allocation-hashing、hash4j等。需要注意的是hash4j依赖包后续的版本需要JDK11+。
    java 复制代码
    <!-- ZeroAllocationHashing依赖包 -->
    <dependency>
        <groupId>net.openhft</groupId>
        <artifactId>zero-allocation-hashing</artifactId>
        <version>0.16</version>
    </dependency>
    
    <dependency>
        <groupId>com.dynatrace.hash4j</groupId>
        <artifactId>hash4j</artifactId>
        <version>0.20.0</version>
    </dependency>
    • zero-allocation-hashing依赖包的几个简单使用示例如下:
    java 复制代码
    import lombok.extern.slf4j.Slf4j;
    import net.openhft.hashing.LongHashFunction;
    import net.openhft.hashing.LongTupleHashFunction;
    
    import java.math.BigInteger;
    
    /**
     *
     * @description Digest Utils
     * @author 
     */
    @Slf4j
    public class DigestUtils {
    
        /**
         * xx3 hash 64 bits
         * @param source
         * @return
         */
        public static long xx3Hash64Bits(String source) {
            return LongHashFunction.xx3().hashBytes(source.getBytes());
        }
    
        /**
         * xx3 hash 128 bits
         * @param source
         * @return
         */
        public static BigInteger xx3Hash128Bits(String source) {
            long[] hashes = LongTupleHashFunction.xx128().hashBytes(source.getBytes());
            /**
            // 处理为无符号
            BigInteger unsignedHigh = new BigInteger(1, toBytes(hashes[1]));
            BigInteger unsignedLow = new BigInteger(1, toBytes(hashes[0]));
            **/
            return new BigInteger(1, toBytes(hashes[1])).shiftLeft(64).add(new BigInteger(1, toBytes(hashes[0])));
        }
    
        /**
         * xx3 hash 128 bits digest
         * @param source
         * @return
         */
        public static String xx3Hash128BitsDigest(String source) {
            return xx3Hash128Bits(source).toString(16);
        }
    
        private static byte[] toBytes(long value) {
            byte[] bytes = new byte[8];
            for (int i = 7; i >= 0; i--) {
                bytes[i] = (byte) (value & 0xFF); // 取低8位
                value >>>= 8; // 无符号右移,高位补0
            }
            return bytes;
        }
    
    }
相关推荐
艺杯羹12 分钟前
MyBatis之核心对象与工作流程及SqlSession操作
java·mybatis
神的孩子都在歌唱19 分钟前
3423. 循环数组中相邻元素的最大差值 — day97
java·数据结构·算法
ahead~1 小时前
【大模型入门】访问GPT_API实战案例
人工智能·python·gpt·大语言模型llm
喜欢吃豆1 小时前
深入企业内部的MCP知识(三):FastMCP工具转换(Tool Transformation)全解析:从适配到增强的工具进化指南
java·前端·人工智能·大模型·github·mcp
用户1551733938831 小时前
前后端处理 `multipart/form-data` 混合参数(实体对象+文件)方案
java
东阳马生架构1 小时前
订单初版—3.支付和履约链路中的技术问题说明文档
java
留不住丨晚霞2 小时前
说说SpringBoot常用的注解?
java·开发语言
大模型真好玩2 小时前
准确率飙升!GraphRAG如何利用知识图谱提升RAG答案质量(额外篇)——大规模文本数据下GraphRAG实战
人工智能·python·mcp
19892 小时前
【零基础学AI】第30讲:生成对抗网络(GAN)实战 - 手写数字生成
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·近邻算法
华科云商xiao徐2 小时前
Java多线程爬虫动态线程管理实现
java·爬虫·数据挖掘