> 文章列表 > HashMap和HashTable的区别

HashMap和HashTable的区别

HashMap和HashTable的区别

目录

  • 一、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.线程安全和不安全

HashMap和HashTable的区别

2.继承的父类不同

HashMap和HashTable的区别

3.对null key和null value的支持不同

HashTable中value不能为空,key也不能为空,因为null不能调用hashCode
HashMap和HashTable的区别
HashMap允许key,value为null,如果key为null的话,会以0进行hash
HashMap和HashTable的区别
HashMap和HashTable的区别

4.初始化和扩容方式不同

HashTable
HashMap和HashTable的区别
HashMap
HashMap和HashTable的区别