代码改变世界

HashMap和Hashtable的差别

2014-04-20 14:52  每天努力一点点  阅读(151)  评论(0编辑  收藏  举报


1. HashMap 与 Hashtable继承自不同的类

    1) HashMap 继承自AbstractMap,而AbstractMap实现了Map接口

    2) Hashtable 继承自Dictionary

2. HashMap可以以null为key,而Hashtable不可以,这点差别源自于两者对于null有不同的处理方式,具体见下面代码:

   1) HashMap     (put方法:public V put(K key, V value))

if (key == null)
    return putForNullKey(value);

   2) Hashable    (put方法:public synchronized V put(K key, V value))

if (value == null) {
    throw new NullPointerException();
}

3. HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,因为contains方法容易让人引起误解,实际上此方法等同于containsvalue。

4. Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如使用:Collections.synchronizedMap)