如何将哈希码对象值转换为字符串变量
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 正如我所说,您无法从哈希码中恢复,但您可以获得任何对象的哈希码。这是用一个例子来解释的。另请查看更新以了解更多信息以及链接。以上是关于如何将哈希码对象值转换为字符串变量的主要内容,如果未能解决你的问题,请参考以下文章
字符串何时缓存它的哈希码?是在String对象创建时还是在调用hashcode方法之后? [重复]