A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 哈哈哈欠虫 中级黑马   /  2015-9-5 21:49  /  855 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashMap和Hashtable的区别

1 个回复

倒序浏览
相同点:
        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已经被淘汰了,不要在新的代码中再使用它。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马