gpt4 book ai didi

java - 是否有专门针对 BitSet 的哈希函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:17 25 4
gpt4 key购买 nike

我希望将用户数据存储在 BitSet 或 EWAHCompressedBitmap 中。我需要将 userid 散列为一个整数值,该整数值确定集合中特定用户的位置。我想知道是否有一个哈希函数返回 0 到 2147483583 之间的正数。我正在尝试使用 Murmur3,但在 Java 中它返回有符号整数。将返回的整数转换为无符号整数,导致 Long 变大,可以在 BitSet 中用作索引位置。

=> (import '(com.googlecode.javaewah EWAHCompressedBitmap))
com.googlecode.javaewah.EWAHCompressedBitmap
=> (def bm (EWAHCompressedBitmap.))
#'ninegag.core/bm
=> (.set bm 2147483583)
true
=> (.set bm -2147483583)
IndexOutOfBoundsException Position should be between 0 and 2147483583 com.googlecode.javaewah.EWAHCompressedBitmap.set (EWAHCompressedBitmap.java:1230)

我的问题是:在 Java 中生成 0 到 2147483583 之间的散列值的最佳方法是什么,或者是否有像 BitSet 这样的数据结构支持 Long 作为索引位置?

最佳答案

使用位掩码获取有符号整数的低 31 位 - 保证为无符号数。最大整数 - Integer.MAX_VALUE 是一个低 31 位设置为 1 的数字,因此非常适合用作位掩码:

int signedHash = ~0; // 32 ones or -1
int unsignedHash = signedHash & Integer.MAX_VALUE;

关于java - 是否有专门针对 BitSet 的哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com