我正在准备软件面试,现在已经有几天困扰了我。
我无法弄清Java Collection API中存在的linkedhashmap,map,hashtable,hashmap之间的区别。
所有这些都具有相同的获取和放置复杂性吗?我知道map是接口类
hashmap,hashtable,linkedhashmap实现此接口。那么这是否意味着这3个类的内部实现是相同的?如何在collections api中实现它们?
提前致谢!!!
最佳答案
我怀疑这些差异是否可以比JavaDocs中为这些类编写的更好地解释:
Map是所有这些类共有的基本接口
Hashtable是该接口的一种实现,在过去的日子里,人们认为将所有内容同步是一个好主意(参考Vector)。如果您知道自己在做什么,它将提供“某种”线程安全性。如果您认真考虑可以在多个线程中使用的映射,则应绝对检查ConcurrentHashMap
和ConcurrentSkipListMap
。
HashMap与Hashtable几乎相同,但已删除了同步。这是首选的通用Map实现。
LinkedHashMap还会维护其条目的链接列表,从而允许维护顺序或轻松地将其用作LRU缓存,只需阅读JavaDoc。
所有上述Map
实现都有其基本的get / put操作(以(摊销的)O(1)时间复杂度)。 null
值的处理略有不同,因此不可避免地要检查JavaDoc以获得详细信息。
要了解如何实现这些类,请看一下它们的继承树:Map
(仅界面)Dictionary
(过时的抽象类)Hashtable
(“旧”地图实现独立存在)AbstractMap
(“新”地图实现的基本功能)HashMap
(通用的第一个具体地图实现)LinkedHashMap
(通过维护链接列表来扩展HashMap
)
关于java - linkedhashmap,hashmap,map,hashtable之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6382817/