String hashCode():总是相同的结果?

时间:2014-08-14 17:52:20

标签: android string hashcode

This question's answer很好地解释了Java的情况。我想知道Android的情况。具体做法是:

问题1:对于给定的字符串,哈希码是否总是相同?(更具体地说,我需要每次在用户手机上使用给定字符串的哈希码相同应用程序已打开。)

我搜索了android String的来源并找到了this,但我正在玩火,因为我不知道关于Android源的第一件事,如果/当它被制造商修改等。

问题2:如果1的答案为否,那么在我自己的hashCode()函数中使用上面引用的源代码中的hashCode()代码是否明智?

2 个答案:

答案 0 :(得分:3)

  • 相同的String应该具有相同的hashCode()(基于hashCode定义)

如果你看一下String类的Android hashCode()。您将看到hashCode基于char数组(相同),char count(相同)和offset字段(此值似乎总是为零(0) - 在String构造函数中设置 - 我不知道为什么Google添加这个偏移字段.Oracle String.hashCode()是基于char数组计算的,只计算char数。

  • 您可以构建自己的hashCode()函数,如Oracle String hashCode():此实现基于char数组和char计数,因此相同的String始终具有相同的hashCode()。

答案 1 :(得分:2)

由于哈希码算法实际上是在接口契约中指定的,并且Java-doc也被用作Android SDK头文件的一部分,我想你可以指望它是“稳定的”。

但是你可能更好地使用加密强大的哈希函数,如SHA1SHA256,具体取决于你的用例,因为它们也不太可能产生冲突(Java) hashCode()只有32位值范围!)。