我们有一个非关键标签,其值为字符串。我们要检查标签值的变化。但是我们不想进行字符串比较,因为这涉及客户端-服务器,而是我们想为字符串计算某种值并使用该值来帮助检测字符串的变化。由于字符串是非关键的,我们想知道是否有一个非常简单和快速的解决方案来计算这样的值,以帮助检测字符串的变化。
问问题
104 次
2 回答
2
使用 .hashCode()
String.hashCode()
不完美,因为它是有损的。因此,字符串可能会更改并且具有相同的哈希码。(但这不会经常发生)几乎每次字符串发生变化时,它的哈希码也会发生变化。
所以你知道你在做什么,代码String.hashCode()
是这样的:
public int hashCode() {
int h = hash; // the cached hash value
int len = count; // the number of characters in the string
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
于 2012-05-09T16:12:02.833 回答
0
是的。但如果您需要唯一性,请不要使用哈希码。使用 SHA256 摘要。
String tag = "...";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(text.getBytes("UTF-8"));
byte[] digest = md.digest();
于 2012-05-09T16:15:25.540 回答