使用动态数组处理哈希表中的冲突

时间:2013-06-19 20:07:36

标签: algorithm data-structures linked-list hashtable dynamic-arrays

查看一些哈希表实现,单独的链接似乎是通过链表或树来处理的。是否有理由不使用动态数组?我认为拥有动态数组也会有更好的缓存性能。但是,由于我没有看到任何这样的实现,我可能会遗漏一些东西。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

动态数组上链表的一个优点是可以更快地完成重组。而不是必须制作一堆新的动态数组,然后将旧动态数组中的所有元素复制到新的动态数组中,链接列表中的元素可以重新分配到新存储桶中,而无需执行任何分配。

此外,如果加载因子很小,使用链表的空间开销可能比动态数组的空间开销要好。使用动态数组时,通常需要存储指针,长度和容量。这意味着如果你有一个空的动态数组,你最终需要两个整数和一个指针的空间,以及预先分配来保存元素的任何空间。在空桶中,与仅存储链表的空指针相比,此空间开销较大。另一方面,如果存储桶中包含大量元素,那么动态数组将更具空间效率,并且由于引用的局部性而具有更高的性能。

希望这有帮助!

答案 1 :(得分:1)

我能想到的一个优点是删除..而添加是在哈希的头部完成的...如果我想删除哈希中的值,那么阵列很难,因为它可能存在于中间数组。