gpt4 book ai didi

java - linkedhashmap、hashmap、map、hashtable 之间的区别

转载 作者:行者123 更新时间:2023-12-02 11:20:10 27 4
gpt4 key购买 nike

我正在准备软件面试,几天来我一直被一个问题困扰。

我无法弄清楚 Java Collection API 中存在的 linkedhashmap、map、hashtable、hashmap 之间的区别。

所有这些都具有相同的 get 和 put 复杂性吗?我知道map是接口(interface)类而hashmap、hashtable、linkedhashmap都实现了这个接口(interface)。那么这是否意味着这3个类的内部实现是相同的?它们是如何在集合 API 中实现的?

提前致谢!!!

最佳答案

我怀疑这些差异是否能够比 JavaDocs 中为这些类编写的内容更好地解释:

  • Map是所有这些类共有的基本接口(interface)
  • 一个Hashtable是该接口(interface)的一种实现,在“旧”时代,人们认为同步所有内容是一个好主意(引用Vector)。如果您知道自己在做什么,它会提供“某种”线程安全性。如果您认真对待可以从多个线程使用的映射,您绝对应该查看 ConcurrentHashMapConcurrentSkipListMap .
  • 一个HashMap与哈希表几乎相同,但删除了同步。它是首选的通用 Map 实现。
  • 一个LinkedHashMap另外还维护其条目的链接列表,这允许维护排序或轻松将其用作 LRU 缓存,只需阅读 JavaDoc 即可。

所有上述 Map 实现都具有(摊销)O(1) 时间复杂度的基本 get/put 操作。 null 值的处理存在细微差别,不可避免地要检查 JavaDoc 以获取详细信息。

要了解这些类是如何实现的,请查看它们的继承树:

  • map (只是界面)
    • Dictionary(已废弃的抽象类)
      • Hashtable(“旧” map 实现独立存在)
    • AbstractMap("new" map 实现的基本功能)
      • HashMap(第一个通用的具体映射实现)
        • LinkedHashMap(通过维护链表扩展HashMap)

关于java - linkedhashmap、hashmap、map、hashtable 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com