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

我正在为软件访谈做准备,而且我现在仍然坚持着一个问题。

我一直无法弄清楚Java Collection API中存在的链接hashmap,map,hashtable和hashmap之间的区别。

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

提前致谢!!!


我怀疑这些差异可以被解释得比这些类的JavaDocs中已经写的更好:

  • 地图是所有这些类共有的基本界面
  • 一个Hashtable是该接口的一个实现,对于那些认为同步一切的“旧”时代来说,这是一个好主意(参考向量)。 如果你知道你在做什么,它提供了“一种”线程安全。 如果您认真对待可以从多个线程使用的地图,则应该检查ConcurrentHashMapConcurrentSkipListMap
  • HashMap与Hashtable几乎相同,但同步已被删除。 这是首选的通用Map实现。
  • 一个LinkedHashMap另外还维护一个链接的条目列表,它允许维护一个排序或者轻松地将它用作一个LRU缓存,只需读取JavaDoc。
  • 所有上述Map实现都具有基本的get / put操作(分期付款)O(1)时间复杂度。 处理null值有细微的差别,因此检查JavaDoc以获取详细信息是不可避免的。

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

  • Map (只是界面)
  • Dictionary (废弃的抽象类)
  • Hashtable (“旧”地图实现依靠它自己)
  • AbstractMap (“新”地图实现的基本功能)
  • HashMap (通用的第一个具体地图实现)
  • LinkedHashMap (通过维护链表来扩展HashMap

  • 他们都遵守同样的合同,但执行过程中存在一些差异:

  • LinkedHashMap:按照插入顺序维护键
  • HashTable:所有操作都是同步的,没有订购保证
  • HashMap:无订单保证,最佳性能
  • 通常,最佳做法是使用Map作为变量的类型,然后根据代码的需要实例化实现类型。 除非需要一些排序保证,否则通常首选HashMap ,在这种情况下LinkedHashMapTreeMap是不错的选择。


    所有类都实现了Map接口,并提供了大部分相同的功能。 最重要的区别是通过条目迭代的顺序:

    HashMap对迭代顺序绝对没有保证。 它可以(并且将)甚至在添加新元素时完全改变。 TreeMap将根据它们的compareTo()方法(或外部提供的比较器)根据键的“自然排序”进行迭代。 此外,它还实现SortedMap接口,该接口包含依赖于此排序顺序的方法。 LinkedHashMap将按照条目放入地图的顺序进行迭代。“Hashtable”是基于散列的地图的通用名称。 在Java API的上下文中,在集合框架存在之前,Hashtable是Java 1.1以前的一个过时的类。 它不应该再被使用,因为它的API混淆了重复功能的过时方法,并且它的方法是同步的(这会降低性能并且通常是无用的)。 使用ConcurrrentHashMap而不是Hashtable。

    链接地址: http://www.djcxy.com/p/16407.html

    上一篇: difference between linkedhashmap, hashmap, map, hashtable

    下一篇: How to update a value, given a key in a java hashmap?