【问题标题】:contain operation on hashmap dependant on size of hashmap?包含依赖于哈希图大小的哈希图操作?
【发布时间】:2023-04-04 22:29:01
【问题描述】:

根据我对 hashmap 的理解

问题1:- 对于返回每个键的唯一哈希码的 Hashmap

判断一个对象是否包含在hashmap中的时间是常数 并且不依赖于 hashmap 的大小

问题2:- 对于 Hashmap,为每个键返回相同的哈希码,但对于 equals 方法返回 false

判断一个对象是否包含在hashmap中的时间取决于hashmap的大小

这是真的吗?

【问题讨论】:

  • 当你阅读Javadoc时,它说了什么?
  • @Mark Peters 我在 javadoc 上没有找到类似的声明。

标签: java hashmap


【解决方案1】:

一般认为hashmap查找只需要O(1)时间。这是查找的平均时间。但在最坏的情况下,它也可能是 O(n)。例如,如果在 hashmap 的实现中使用链表,则可能会出现这种情况。但是如果使用自平衡树,可以避免最坏情况,将最坏的情况减少到 O(log n) 时间。

【讨论】:

  • HashMaps实际上是使用链表实现的。你的意思是当所有元素落入同一个桶时,它会是O(n)
  • HashMaps 是使用链表实现的。那是真实的。我的意思是,如果您使用自平衡树,那么在最坏的情况下您可以期待更好的时间。很抱歉造成混乱。
  • 最后一条语句有错误。对于树的实现,应该读为“O(log(n))”。
  • 已编辑。谢谢。
【解决方案2】:

如果我们有一个适当编写的散列函数,那么检索的顺序是 O(1)。

这样想,如果您的哈希函数编写得当,以便元素分布在桶中,那么搜索元素的时间将与桶的大小成正比。现在,如果您有一个恒定大小的存储桶,并且存储桶的数量或内存大小不受限制,那么您将能够在恒定时间内检索元素。

关于你的第二个问题:是的,如果你有一个哈希函数返回相同的哈希码,那么元素的检索顺序将与哈希图的大小成正比,也称为 O(n)

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2022-12-10
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多