为使基于散列的集合更快地使用唯一的hashCode的原因是什么?还有使hashCode不可变的原因是什么?

我读了here,但听不懂,所以我读了其他一些资源,最后遇到了这个问题。

谢谢。

最佳答案

哈希码不必是唯一的,但是如果不同的对象具有不同的哈希码,它们的效果会更好。

哈希码的常见用途是用于存储和查找数据结构(如HashMap)中的对象。这些集合将对象存储在“存储桶”中,所存储对象的哈希码用于确定存储在哪个存储桶中。这加快了检索速度。查找对象时,HashMap无需使用所有对象,而是使用哈希码来确定要查找的存储桶,并且仅在该存储桶中查找。

您询问了可变性。我认为您要问的是要求存储在HashMap中的对象在映射中时不要发生突变,或者最好是该对象是不可变的。原因是,通常,使对象变异会改变其哈希码。如果对象存储在HashMap中,则将使用其哈希码来确定将其存储在哪个存储桶中。如果该对象发生了突变,其哈希码将发生变化。如果在这一点上查找对象,将导致不同的哈希码。这可能将HashMap指向错误的存储桶,结果,即使该对象先前存储在该HashMap中,也可能找不到该对象。

关于java - map 和哈希码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20160757/

10-10 13:26