如果不同的对象(比如3)具有相同的哈希码,那么应该是map的大小,并因此存在于同一个桶中?

时间:2017-11-22 09:58:42

标签: dictionary hashmap hashcode

如果不同的对象(比如3)具有相同的哈希码,那么应该是map的大小,并因此存在于同一个桶中?

1 个答案:

答案 0 :(得分:0)

哈希表的结果大小取决于我们使用的collision resolution方案。

在最简单的情况下,我们使用的是单独链接(使用链接列表)

在这种情况下,我们将有一个N桶数组,每个桶包含对链表的引用。

如果我们继续在哈希表中插入3个项目,所有这些项目共享相同的哈希码,那么单个目标链接列表将增长到3。

因此,在高层次上,我们至少需要N"单位"用于存储存储桶引用的空间 plus 3"单位"空间来存储(占用的)链表的元素。

这些"单位"的确切大小取决于实现细节,例如字长(32位与64位)以及链表的确切定义(单一与双重) - 链接列表)。

假设我们在32位计算机上使用单链接列表(对于每个存储桶),总大小将是(大约)32 * N + (32 + x) * 3,其中x指的是数据的大小我们正在存储的类型(例如整数,双数,字符串等)

如果您想了解更多信息,我建议使用Google搜索"哈希表冲突"了解更多信息。