1. 程式人生 > >Java原始碼分析--java.util.Hashtable

Java原始碼分析--java.util.Hashtable

都說Hashtable是執行緒安全的,我們看一看Hashtable與HashMap有那些不同。

  • 定址方式
int hash = hash(key);
int index = (hash & 0x7FFFFFFF) % tab.length;

// 通過key值與掩碼異或得到
private int hash(Object k) {
    // hashSeed will be zero if alternative hashing is disabled.
    return hashSeed ^ k.hashCode();
}
  • Hashtable大部分方法都使用了synchronized關鍵字修飾,好處是安全,壞處是速度慢。
public synchronized boolean isEmpty();
public synchronized Enumeration<K> keys();
public synchronized Enumeration<V> elements();
public synchronized boolean contains(Object value);
public boolean containsValue(Object value);
public synchronized boolean containsKey(Object key);
public synchronized V get(Object key);
public synchronized V put(K key, V value);//rehash被同步方法包裹,不會出現死迴圈
public synchronized V remove(Object key);
public synchronized void putAll(Map<? extends K, ? extends V> t);
public synchronized void clear();
...