【发布时间】:2015-10-20 10:22:40
【问题描述】:
我希望将用户数据存储在 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 作为索引位置?
【问题讨论】:
标签: java hash clojure long-integer