Java原始碼分析--java.util.Hashtable
阿新 • • 發佈:2018-12-11
都說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(); ...