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

时间:2014-07-11 06:40:47

标签: android object plist

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

我已尝试过以下代码。

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

1 个答案:

答案 0 :(得分:3)

不,那是不可能的。散列是一种单向转换 - 一旦某些东西被散列,就无法恢复原始信息。

哈希码的概念使得多个对象可以具有相同的哈希码。

例如:

  

字符串优先=" ABCDEa123abc&#34 ;;

     

String second =" ABCDFB123abc&#34 ;;

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

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相等但是2个字符串不相等。

因此,哈希码无法唯一标识字符串。

如记录所述,

  

对于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