参考内存位置,哈希中使用的桶是什么?

What is bucket used in hashing, with reference to a memory location?

在HashMap中,或者任何使用散列技术的地方,都会在对象上调用hashcode方法,计算出一个散列,用于找到存储Entry对象的bucket。

hascode() 方法返回的值不是内存位置。那么引用内存位置的bucket到底是什么概念呢?

如果它是一个单独的内存位置,那么怎么可能在那里保存一个 Map 条目的链表?

我在堆栈中发现了类似的问题,但 none 清楚地解释了桶的真正含义。请帮我理清桶的概念。

散列中的桶table只不过是一个数组索引(在大多数情况下)。

您的哈希函数将始终 return 您需要放置对象的数组索引(或根据要求本身执行任何操作)。所以要了解内存是如何管理的,你需要了解数组是如何分配内存的。

它们被赋予了连续的内存位置,以确保对任何索引的动态访问都能完美运行。

什么是hashtablereturns同索引

然后您可以将该索引指向链表或另一个数组以存储更多值。

当访问这些值时,您可以简单地在常数时间内从散列函数访问所需的索引,如果该索引包含多个值,您可以迭代这些值,假设该索引指向一个链表。

在这种情况下,链接列表将位于单独的位置。该位置的起始地址将由该数组索引指向。

在Hashing中,hashcode()的值决定了bucket的索引。许多对象可能具有相同的 hashcode() 值。在这种情况下,所有此类对象都将映射到同一个存储桶。

理论上桶可以想象成所有这些对象的容器。它可以以各种方式实现。它在 "HashMap" 实现中被实现为一个简单的链表。这意味着,bucket 被实现为一个链表。我们可以想象每个桶都是一个链表。

比如一个bucket中有3个对象(A,B,C),bucket可以可视化为链表A->B->C->null