【问题标题】:Hash Table implement iterate and findMinHash Table 实现 iterate 和 findMin
【发布时间】:2016-07-28 23:35:29
【问题描述】:

我在 java 中编写了一个标准的 Hash Table 类。它有大量的桶数组,要插入、检索或删除元素,我只需计算元素的哈希值并查看数组中的适当索引即可获得正确的桶。

但是,我想实现某种迭代器。除了遍历数组中的所有索引并忽略那些为空的索引之外,还有其他方法吗?因为我的哈希表可能包含数百个空条目,并且只有少数已被哈希和插入的元素。当 n

要实现 findMin,我可以在每次插入新元素时简单地保存最小元素,但我想使用迭代器方法。

谢谢!

【问题讨论】:

  • 如果你需要一个迭代器,那么也许需要一个新的设计。也许是一个列表而不是一个稀疏数组?默认的 java 实现使用映射(字典)。这有很多好处。
  • 我只是做了这个实现来更好地理解我的数据结构课程。我不是在寻找一个毫无疑问会加快速度的已经完成的实现。

标签: java data-structures hash hashmap hashtable


【解决方案1】:

您可以存储非空存储桶的排序列表,并在您在哈希表中插入内容时将存储桶的 id 插入到列表中(如果它不存在的话)。

但是,如果它没有埋在循环中太深的话,搜索几百个空桶可能不会太昂贵。效率低一点可能比更复杂的设计要好。

【讨论】:

    【解决方案2】:

    您可以维护映射条目的链表,就像标准库中的 LinkedHashMap 一样。

    或者您可以使您的哈希表确保容量始终最多为 kn,对于某个合适的 k 值。这将确保迭代在 n 中是线性的。

    【讨论】:

      【解决方案3】:

      如果顺序对您很重要,您应该考虑使用二叉搜索树(例如左倾红黑树)或跳过列表来实现您的字典。在这些情况下,它们更适合这项工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多