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

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

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

提前致谢!!!

最佳答案

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


Map是所有这些类共有的基本接口
Hashtable是该接口的一种实现,在过去的日子里,人们认为将所有内容同步是一个好主意(参考Vector)。如果您知道自己在做什么,它将提供“某种”线程安全性。如果您认真考虑可以在多个线程中使用的映射,则应绝对检查ConcurrentHashMapConcurrentSkipListMap
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/

10-12 07:14