HashMap和HashTable的区别

来源:互联网 发布:手机淘宝txt 编辑:程序博客网 时间:2024/06/05 19:49

1、从时间上来说,HashMap比HashTable出现得晚一些,HashMap出现于jdk1.2,而HashTable出现于jdk1.1。
2、两个类都实现了Map、Cloneable、Serializable三个接口,但是HashMap继承的是AbstractMap类,而HashTable继承Dictionary类。
3、HashMap支持null key和null value,而HashTable不支持,直接抛出空指针异常。因为HashMap对于空键和空值有putForNullKey方法进行处理,将null的hashCode值定为了0,从而将其存放在哈希表的第0个bucket中。
4、HashMap和HashTable都使用哈希表来存储键值对。
在数据结构上是基本相同的,都创建了一个继承自Map.Entry的私有的内部类Entry,每一个Entry对象表示存储在哈希表中的一个键值对。
Entry对象唯一表示一个键值对,有四个属性:

  -K key 键对象

  -V value 值对象

  -int hash 键对象的hash值

  -Entry entry 指向链表中下一个Entry对象,可为null,表示当前Entry对象在链表尾部

有多少个键值对,就有多少个Entry对象。

HashMap/HashTable内部用Entry数组实现哈希表,而对于映射到同一个哈希桶(数组的同一个位置)的键值对,使用Entry链表来存储(解决hash冲突)。

5、HashTable默认的初始大小为11,之后每次扩充为原来的2n+1。HashMap默认的初始化大小为16,之后每次扩充为原来的2倍。初始加载因子都为0.75。

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

原创粉丝点击