用于为哈希定义存储区的任何数据结构

时间:2017-01-04 17:58:24

标签: java data-structures

我们是否有除Array以外的任何可用数据结构,以便将其用作实现HashMap的哈希算法中的存储区 固定长度Array需要进行重新散列(一旦达到阈值,就将元素传输到新容量桶)。

感谢您的投入。

1 个答案:

答案 0 :(得分:3)

在谈论替代方案之前,让我们谈谈人们喜欢使用数组作为桶结构的一些原因:

  • 它支持非常快速的随机访问。一旦有了哈希码,就可以在时间O(1)中索引到你想要的槽,隐藏常数非常低。< / LI>
  • 插入是摊销 - 恒定时间。正如您所提到的,您确实需要定期增长数组,但插入其他元素的成本是摊销常量,因为在触发O(n)-cost调整大小之前,你必须进行O(n)插入。

如果您将数组替换为其他数据结构,则可能需要在执行此操作时支付某种额外费用。

一种不使用顶级表的方法是extendible hashing,它通过使用trie作为其桶结构来工作。哈希码被视为某个基数(例如,基数为2)中的数字,并且通过遍历特里数量的位或数字找到元素以找到您正在寻找的对象。当水桶变得太满时,它们会被分开,这确实需要改变一些东西,但这个数量可以控制。这种方法的缺点是查找速度较慢。对于初学者,你必须遵循一些指针才能到达你的最终元素,这通常具有较差的引用位置。其次,如果您的哈希码很长(例如,它们中有k位),则查找的成本变为O(k)而不是O(1)。对于大k(例如,128位散列),这可能需要相当长的时间。