HashMap和Hashtable的区别
1.线程安全
HashMap是线程不安全,但是处理速度快,Hashtable线程安全,但是相对处理速度慢,主要因素就是方法中是否增加了Synchronize关键字;
Hashtable的put方法和remove方法
HashMap的put方法和remove方法
2.是否提供contains方法
HashMap只有containsValue和containsKey方法;HashTable有contains、containsKey和containsValue三个方法,其中contains和containsValue方法功能相同。
Hashtable
HashMap
3.是否允许为空值
Hashtable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
*
@param value the value
* @return the previous value of the specified key in this hashtable,
* or <code>null</code> if it did not have one
* @exception NullPointerException if the key or value is
* <code>null</code> //源码解释如果key或者value为空将会报空指针异常
* @see Object#equals(Object)
* @see #get(Object)
*/
public synchronized V put(K key, V value) { //这是Hashtable的put方法源码解析
// Make sure the value is not null //确保value不为空
if (value == null) {
throw new NullPointerException();
}
/**
*//HashTable的put方法中没有相应的异常说明,允许key或者value为空
*
* Associates the specified value with the specified key in this map.
* If the map previously contained a mapping for the key, the old
* value is replaced.
*
* @param key key with which the specified value is to be associated
* @param value value to be associated with the specified key
* @return the previous value associated with <tt>key</tt>, or
* <tt>null</tt> if there was no mapping for <tt>key</tt>.
* (A <tt>null</tt> return can also indicate that the map
* previously associated <tt>null</tt> with <tt>key</tt>.)
*/
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
4. 数组初始化和扩容机制
HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
5.基类不同
HashTable基于Dictionary类,而HashMap是基于AbstractMap。Dictionary是什么?它是任何可将键映射到相应值的类的抽象父类,而AbstractMap是基于Map接口的骨干实现,它以最大限度地减少实现此接口所需的工作。
Hashtable
补充
Hashtable和Vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
但是Hashtable的子类Properties(配置文件)依然活跃在历史舞台 xml
一样,在jdk1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
但是Hashtable的子类Properties(配置文件)依然活跃在历史舞台 xml
Properties集合是一个唯一和IO流相结合的集合