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

Posted

技术标签:

【中文标题】如何将哈希码对象值转换为字符串变量【英文标题】:How to convert a hash code object value into a string variable 【发布时间】:2014-07-11 06:40:47 【问题描述】:

我正在尝试将我在 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

【问题讨论】:

hashCode() 的结果只是一个整数。你想看这样的数字,还是想看你的对象的字符串表示? 字符串表示 如果我理解正确,请尝试使用这个,ethod developer.android.com/reference/org/w3c/dom/… 【参考方案1】:

不,这是不可能的。散列是一种单向转换 - 一旦对某些内容进行散列,就无法恢复原始信息。

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

例如:

字符串优先 = "ABCDEa123abc";

第二个字符串 = "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()获取对象的hashcode一样,你可以通过--获取String变量的hashcode

System.out.println(Integer.toHexString(s.hashCode()));

了解更多关于 Hashcode 检查 -

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

【讨论】:

@Ved Prakash 那么你会建议我做什么。我正在解析 xml 值,但我不希望 nodeKey.item() 的值仅用于测试值。完整代码请检查我的post 正如我所说,您无法从哈希码中恢复,但您可以获得任何对象的哈希码。这是用一个例子来解释的。另请查看更新以了解更多信息以及链接。

以上是关于如何将哈希码对象值转换为字符串变量的主要内容,如果未能解决你的问题,请参考以下文章

对象的哈希代码

java的hashcode用来判断对象是否相等

16.字符串哈希 哈希表

字符串何时缓存它的哈希码?是在String对象创建时还是在调用hashcode方法之后? [重复]

如果两个对象的哈希码相同则他们不一定相同,如果对象一致则哈希码一定相同

为所有字谜生成相同的唯一哈希码