目录
- 一、HashMap和HashTable的区别
- 二、验证结论
- 1.线程安全和不安全
- 2.继承的父类不同
- 3.对null key和null value的支持不同
- 4.初始化和扩容方式不同
一、HashMap和HashTable的区别
1.HashMap方法没有synchronize修饰,线程非安全,HashTable安全
拓展:HashTable的所有方法都加了synchronize,同步的效率的比较低,我们会采用concurrenthashmap
2.(继承的父类不同)HashTable是继承自Dictionary类,而HashMap是继承自AbstractMap类。
3.(对null key和null value的支持不同).HashTable不允许null值(key和value都不可以),HashMap允许使用null值(key和value)都可以
拓展:HashMap如果key为null 会以0进行计算
4.(初始化和扩容方式不同)HashTable中hash数组初始化大小及扩容方式不同。
拓展:Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。
二、验证结论
1.线程安全和不安全
2.继承的父类不同
3.对null key和null value的支持不同
HashTable中value不能为空,key也不能为空,因为null不能调用hashCode
HashMap允许key,value为null,如果key为null的话,会以0进行hash
4.初始化和扩容方式不同
HashTable
HashMap