我正在尝试将我在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
答案 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()
获取对象的哈希码一样,您可以通过执行 -
System.out.println(Integer.toHexString(s.hashCode()));
要详细了解Hashcode检查 -