java - 短字符串的哈希码可以相同吗?

标签 java string hashcode hash-collision

我有短的 String(少于 10 个字符)。我会将其转换为 int 并将其用作主键。 (由于一些小问题,我不能使用 String 主键。)我知道无限长的字符串的哈希码会发生冲突,但短字符串也会发生冲突吗?

最佳答案

绝对是。例如,EaFB 是冲突字符串,每个字符串的长度只有两个字符!示例:

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/

相关文章:

java - Java中的重复字符串达到一定长度

java - 哈希码和等于

Java HashSet 使用自定义类作为键 : "contains()" function always return false

java - 是否可以设置内部交换来将消息发送到队列(如果存在)?

javascript 无法识别空格字符

Java 字符串限制

来自一个字段的 Java hashCode

java - Spring中如何获取上传文件的完整路径

java - 如何正确地将具有给定小数位数的浮点值的字符串解析为整数?

java - 如何使用正则表达式从字符串中排除子字符串的出现?