hashcode是否是Strings独有的?

Bat*_*tty 6 java hashcode

最近,我遇到了一段代码,在哪里Map<Integer, String>使用,其中Integer(key)是hashCode一些字符串和String值对应的.

这是正确的做法吗?因为现在,equals调用String时不会被调用get.(get也是hashCode()在String对象上使用方法完成的.

或者,hashCode(s)对于唯一的字符串是唯一的吗?

我检查了equalsod String类.有为此写的逻辑.我很迷惑.

JB *_*zet 10

HashMap 确实用于equals()比较键.它仅用于hashCode()查找密钥所在的桶,从而大大减少要与之比较的密钥数量equals().

显然,hashCode()不能产生唯一值,因为int限制为2 ^ 32个不同的值,并且存在无限可能的String值.

总之,结果hashCode()不适合a的关键Map.

  • 一切都是有限的:字符串是字符数组,Java中数组的最大长度恰好在Integer.MAX_VALUE之下,而字符是无符号的2字节整数. (2认同)

Evg*_*eev 5

不,它们不是唯一的,例如“ FB”和“ Ea”都具有hashCode = 2236