我理解使用不可变对象作为映射键更好。但是,使用默认的hashCode()方法(当然,我不覆盖equals()方法)的可变对象如何?这也应该可以,因为默认的hashCode()使用对象内存地址?
我有什么好怀念的吗?
发布于 2014-03-18 15:57:18
下面是带有字符串的散列代码。但是,需要担心的一个问题是,在早期/晚期版本的Java字符串哈希代码之间可能会发生实现更改。
public int hashCode()
{
return "name".hashCode();
} 此外,还有一篇文章哈希碰撞概率
发布于 2019-11-01 19:06:44
Mutuable对象作为一个键使用默认的equals()和hashcode()是没有用的。
e.g
Map.put(新对象(),“值”);
当你想得到那个价值的时候,
Map.get(新对象());//这将始终返回null
因为使用新对象(),将生成新的哈希码,并且它不会指向保存值的预期桶号,如果最终桶号相同,它将无法匹配哈希码,甚至等于,因此它总是返回NULL。
https://stackoverflow.com/questions/22483589
复制相似问题