我怀疑这些差异是否可以比JavaDocs中为这些类编写的更好地解释:
- Map是所有这些类共有的基本接口
- 一个Hashtable的是一个实现该接口的,因为当它被认为拥有一切同步是一个好主意(参见“老字号”天矢量)。如果您知道自己在做什么,它将提供“某种”线程安全性。如果您认真考虑可以在多个线程中使用的映射,则应绝对检查
ConcurrentHashMap
andConcurrentSkipListMap
。 - 一个HashMap中是几乎相同哈希表,但与同步去除。这是首选的通用Map实现。
- 一个linkedHashMap的额外维护它的条目,这使得维持排序或轻松地使用它作为一个LRU缓存,刚读的JavaDoc的链表。
所有上述
Map实现都有其基本的get / put操作(摊销) O(1)
时间复杂度。在
null值的处理上存在细微的差异,不可避免地要检查JavaDoc以获得详细信息。
要了解如何实现这些类,请看一下它们的继承树:
Map
(只是界面)Dictionary
(过时的抽象类)Hashtable
(“旧的”地图实现自行运行)AbstractMap
(“新”地图实现的基本功能)HashMap
(第一个通用的具体地图实现)linkedHashMap
(HashMap
通过维护链接列表进行扩展)



