如何将哈希码对象值转换为字符串变量



我正在尝试将我在logacat文件中收到的哈希码值转换为字符串表示。

我试过下面的代码。

final Element e = (Element)nodes_array.item(index); 
final NodeList nodeKey = e.getElementsByTagName("key"); 
System.out.println(" $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"+nodeKey.item(1).toString());

并在logcat文件中得到以下输出-

 I/System.out(919):  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$org.apache.harmony.xml.dom.ElementImpl@b2dd54a0

不,那不可能。哈希是一种单向转换——一旦某些东西被哈希,就没有办法恢复原始信息。

哈希码的概念是,多个对象可能具有相同的哈希码。

例如:

String first = "ABCDEa123abc";

String second = "ABCDFB123abc";

计算字符串哈希码的公式如下:

S0 X 31 ^ (n-1) + S1 X 31 ^ (n-2) + .... + S(n-2) X 31 + S(n-1)

其中S表示字符串中的字符,n表示字符串的长度。

这个公式不保证每个字符串有唯一的哈希码。

"ABCDEa123abc""ABCDFB123abc"具有相同的哈希码,但由于它们的字符序列不同而不相等。

结果如下-

int hash1 ="ABCDEa123abc".hashCode();
int hash2 = "ABCDFB123abc".hashCode();

注意:hash1和hash2是相等的但是两个字符串是不相等的。

所以hashcode不能唯一标识字符串。

作为记录

,

对于equals()hashCode(),如果equals()对于两个对象返回true,例如'a''b',然后是它们的哈希码必须相同。但是,它进一步说明了哈希码需要不不同,如果equals()返回false。

更新:

就像您通过执行Object.toString()获得对象的哈希码一样,您可以通过执行-

获得String变量的哈希码
System.out.println(Integer.toHexString(s.hashCode()));

查看Hashcode的详细信息-

the-3-things-you-should-know-about-hashcode

最新更新