区别
1、线程区别
首先看HashMap的源码在添加时的处理
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
其次看Hashtable的源码在添加时的处理
public synchronized V put(K key, V value) {
// Make sure the value is not null
if (value == null) {
throw new NullPointerException();
}
后者在操作时添加了synchronized保证了线程安全,Hashtable数据操作的时候都会上锁,所以效率比较低下。
2、为什么HashMap可以添加空key,而Hashtable不行呢?
HashMap在添加空key的时候做了特殊处理,如果key的null的话就等于0
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
Hashtable在添加时做了判断如果key为空时会抛出空异常
if (value == null) {
throw new NullPointerException();
}
3、初始容量
HashMap的初始扩容为16
Hashtable的初始扩容为11
来源:CSDN
作者:weixin_43899440
链接:https://blog.csdn.net/weixin_43899440/article/details/103988879