我有一个这样的类
Class A{
private String string1;
private String string2;
..
..
private String string19;
}
部分字符串可能为空。
我想获得一个哈希/标识符(字符串或数字)为该类的实例。我可以使用hashCode,但我不知道我是否可以得到一些碰撞,我有很多这个类的实例(大约4-5百万)。
我需要一个快速的方法来得到这个哈希值。
谢谢你的帮助
您可以编写一个自定义的hashCode
方法,该方法在String类中使用略微改变版本的hashCode
算法。在Oracle文档中,字符串hashCode
的计算方法如下:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
你可以实现一个修改后的版本,在你的类中计算所有String对象的n
。这样,您就不会浪费空间和时间来创建一个连接字符串来做同样的事情。在某些情况下,这可能是好的,但对于4- 500万个对象,您可能希望避免这么多的混乱。
来源:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html hashCode % 28% 29日
您可以将所有字符串连接起来,然后对其执行您选择的散列。如果字符串为空,可以使用" null "或任何其他字符串——只要保持一致,这真的无关紧要。