Hashtable和hashMap有什么区别

1. 继承父类

HashMap 继承 AbstractMap;Hashtable继承Dictionary类,Dictionary类已过时,子类不建议使用,一般认为Hashtable是一个遗留类

2. 线程安全性

HashMap线程不安全,Hashtable线程安全

3. 包含的contains方法

contains方法通常用于获取一些数据中是否包含指定的数据。

HashMap中将contains拆分为  containsValue  和  containsKey  ,分别可以获取key和value是否包含指定内容

Hashtable保留了contains方法,效果同containsValue 

4. 是否允许null

HashMap的key和value都允许,Hashtable都不允许

5. 计算Hash值方法

HashMap计算key的hash值使用的是HashMap中的hash()方法,避免了过多的hash冲突

Hashtable用的是key的hashcode()方法获取hash值

6. 扩容方式不同

HashMap扩容为原来的2倍,Hashtable扩容为原来的2倍+1

HashMap初始容量16,大小必须2的指数倍;Hashtable默认11,大小可以自由定义

7. 底层实现不同

HashMap采用 数组 + 链表 + 红黑树(Java8之后);Hashtable采用 数组 + 链表

你可能感兴趣的:(Hashtable和hashMap有什么区别)