我有一个长度为128个字符的布尔字符串(如“01100..001”)(表示128个数字为0/1)。我在Java中搜索一个高效(快速)的哈希函数,它产生的表示比128位低得多,而且碰撞明显减少。任何人都可以帮助我,有没有这样的哈希函数?有什么建议吗?
答案 0 :(得分:7)
您是否考虑过使用java.util.BitSet
,取决于您正在做什么,它可以更轻松,更有效率? http://docs.oracle.com/javase/6/docs/api/java/util/BitSet.html
它也有.hashCode()
方法。
答案 1 :(得分:5)
尝试在Java .hashCode()
类上使用String
方法,它返回int
并且速度非常快。
或者,如果您希望将数据存储在.hashCode()
中,则可以在java.util.BitSet
上使用BitSet
方法作为Pulsar建议。
答案 2 :(得分:1)
如果需要计算字符串的哈希值,只需使用String
类的hashCode()
方法即可。根据实现情况,可以进行多项优化以快速计算此值。
例如,在OpenJDK String
类的实现中,hashCode()
方法将值缓存在hash
属性中,只需要计算一次。
谁说一个128个字符的字符串有128位的散列? Java中hashCode()
方法返回的所有哈希值都是int
类型,Java中的ints用32位表示。