黑马程序员技术交流社区

标题: HashMap和Hashtable的区别 [打印本页]

作者: 哈哈哈欠虫    时间: 2015-9-5 21:49
标题: HashMap和Hashtable的区别
HashMap和Hashtable的区别
作者: hmhm123    时间: 2018-3-13 10:50
相同点:
        1、都实现了Map、Cloneable、Serializable三个接口
        2、HashMap和HashTable都使用哈希表来存储键值对。在数据结构上是基本相同的,都创建了一个继承自Map.Entry的私有的内部类Entry,每一个Entry对象表示存储在哈希表中的一个键值对。
        3、HashTable默认的初始大小为11,之后每次扩充为原来的2n+1。HashMap默认的初始化大小为16,之后每次扩充为原来的2倍。而且如果在创建时给定了初始化大小,那么HashTable会直接使用你给定的大小,而HashMap会将其扩充为2的幂次方大小。
        4、HashTable是同步的,HashMap不是,也就是说HashTable在多线程使用的情况下,不需要做额外的同步,而HashMap则不行。

不同点:
        1、HashTable产生于JDK1.1,而HashMap产生于JDK1.2;
        2、HashMap继承自抽象类AbstractMap,HashTable继承自抽象类Dictionary。Dictionary类是一个已经被废弃的类
        3、HashMap是支持null键和null值的,而HashTable在遇到null时,会抛出NullPointerException异常。这并不是因为HashTable有什么特殊的实现层面的原因导致不能支持null键和null值,这仅仅是因为HashMap在实现时对null做了特殊处理,将null的hashCode值定为了0,从而将其存放在哈希表的第0个bucket中。

        注:如果你不需要线程安全,那么使用HashMap,如果需要线程安全,那么使用ConcurrentHashMap。HashTable已经被淘汰了,不要在新的代码中再使用它。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2