我有短的 String
(少于 10 个字符)。我会将其转换为 int
并将其用作主键。 (由于一些小问题,我不能使用 String 主键。)我知道无限长的字符串的哈希码会发生冲突,但短字符串也会发生冲突吗?
最佳答案
绝对是。例如,Ea
和 FB
是冲突字符串,每个字符串的长度只有两个字符!示例:
public static final void main(String[] args) {
System.out.println("Ea".hashCode() + " " + "FB".hashCode());
}
打印 2236 2236
。
Java String#hashCode
函数并不真正接近随机。短字符串很容易产生碰撞,长字符串也好不到哪里去。
一般来说,即使您只坚持每个字符 6 位(ASCII 字母和数字,以及几个符号),您也会超过 32 位哈希码的可能值,只有一个 6 字符的字符串-- 也就是说,您绝对可以保证 2^36 个 6 字符 6 位字符串之间的冲突。
关于java - 短字符串的哈希码可以相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799212/