我在java中编写了一个标准的Hash Table类。它有大量的桶,并且要插入,检索或删除元素,我只需计算元素的哈希值,然后查看数组中的相应索引以获得正确的桶。
但是,我想实现某种迭代器。除了循环遍历数组中的所有索引并忽略那些空的索引之外,还有其他方法吗?因为我的哈希表可能包含数百个空条目,并且只有少数元素已经过哈希和插入。当n<<表的大小时,是否有O(n)方法迭代而不是O(表的大小)?
要实现findMin,我可以在每次插入一个新元素时保存最小元素,但我想使用迭代器方法。
谢谢!
答案 0 :(得分:2)
您可以维护映射条目的链接列表,例如LinkedHashMap在标准库中执行的操作。
或者你可以使你的哈希表确保容量总是最多kn,对于一些合适的k值。这将确保迭代在n中是线性的。
答案 1 :(得分:1)
您可以存储非空桶的已排序列表,并在哈希表中插入内容时将桶的ID插入列表中(如果它尚未存在)。
但是如果它没有埋在一个环路内太深,那么搜索几百个空桶也许并不算太昂贵。效率低下可能比更复杂的设计更好。