HashMap与HashTable的不同
HashTable简介
和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。
Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。
- 首先来观察这两个类的定义
HashTable
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {
HashMap
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
HashTable继承于Dictionary<K,V>,而HashMap继承于AbstractMap<K,V>
- 观察其put方法
HashMap
这是HashMap的put()方法,这里允许key为null。如果key值重复将覆盖其value值,并且先对key值进行两次Hash
如果超过默认容量,将用这种方法扩容。2*table.length
HashTable
*** 线程安全的
*** key值和value值不能为null,会报异常
*** 直接调用了Hashcode()方法
如果超过默认容量将调用rehash()方法,
扩容为二倍加一
- 观察其默认值
HashTable
可知HashTable的默认大小为11
HashMap
可知HashMap的默认容量为16