一尘不染

linkedhashmap,hashmap,map,hashtable之间的区别

java

我正在准备软件面试,现在已经有几天困扰了我。

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

所有这些都具有相同的获取和放置复杂性吗?我知道map是接口类,而hashmap,hashtable,linkedhashmap实现此接口。那么这是否意味着这3个类的内部实现是相同的?如何在collections
api中实现它们?

提前致谢!!!


阅读 220

收藏
2020-12-03

共1个答案

一尘不染

我怀疑这些差异是否可以比JavaDocs中为这些类编写的更好地解释:

  • Map是所有这些类共有的基本接口
  • 一个Hashtable的是一个实现该接口的,因为当它被认为拥有一切同步是一个好主意(参见“老字号”天矢量)。如果您知道自己在做什么,它将提供“某种”线程安全性。如果您认真考虑可以在多个线程中使用的映射,则应绝对检查ConcurrentHashMapand ConcurrentSkipListMap
  • 一个HashMap中是几乎相同哈希表,但与同步去除。这是首选的通用Map实现。
  • 一个LinkedHashMap的额外维护它的条目,这使得维持排序或轻松地使用它作为一个LRU缓存,刚读的JavaDoc的链表。

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

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

  • Map (只是界面)
    • Dictionary (过时的抽象类)
    • Hashtable (“旧的”地图实现自行运行)
    • AbstractMap (“新”地图实现的基本功能)
    • HashMap (第一个通用的具体地图实现)
      • LinkedHashMapHashMap通过维护链接列表进行扩展)
2020-12-03