在一次传递中基于这些字符串的值计算哈希码的最佳方法是什么?
好的我的意思是它需要:
1 – fast:我需要获取大字符串(10 ^ 3..10 ^ 8项)的短字符串的哈希码.
2 – 识别整个数据列表这么多列表可能只有几个不同的字符串必须有不同的哈希码
怎么用Java做?
也许有一种方法可以使用现有的字符串哈希码,但如何合并为单独的字符串计算的许多哈希码?
谢谢.
解决方法
为你创建一个占位符类,然后使用
CRC32 class.它简单快速:
import java.util.zip.CRC32; public class HugeStringCollection { private Collection<String> strings; public HugeStringCollection(Collection<String> strings) { this.strings = strings; } public int hashCode() { CRC32 crc = new CRC32(); for(String string : strings) { crc.update(string.getBytes()) } return (int)( crc.getValue() ); } }
如果集合本身是不可变的,您可以计算一次哈希并将其存储以便重复使用.