查看一些哈希表实现,单独的链接似乎是通过链表或树来处理的。是否有理由不使用动态数组?我认为拥有动态数组也会有更好的缓存性能。但是,由于我没有看到任何这样的实现,我可能会遗漏一些东西。
我错过了什么?
答案 0 :(得分:2)
动态数组上链表的一个优点是可以更快地完成重组。而不是必须制作一堆新的动态数组,然后将旧动态数组中的所有元素复制到新的动态数组中,链接列表中的元素可以重新分配到新存储桶中,而无需执行任何分配。
此外,如果加载因子很小,使用链表的空间开销可能比动态数组的空间开销要好。使用动态数组时,通常需要存储指针,长度和容量。这意味着如果你有一个空的动态数组,你最终需要两个整数和一个指针的空间,以及预先分配来保存元素的任何空间。在空桶中,与仅存储链表的空指针相比,此空间开销较大。另一方面,如果存储桶中包含大量元素,那么动态数组将更具空间效率,并且由于引用的局部性而具有更高的性能。
希望这有帮助!
答案 1 :(得分:1)
我能想到的一个优点是删除..而添加是在哈希的头部完成的...如果我想删除哈希中的值,那么阵列很难,因为它可能存在于中间数组。