HashMap和HashTable的区别
- HashMap是线程不安全的,HashTable是线程安全的,因为hashTable的方法加了synchronized。
- HashMap Key和Value都允许为null,HashTable都不允许为null。
- HashMap继承了AbstractMap,HashTable继承了Dictionary。
- HashMap的初始容量为16,HashTable初始容量为11。
- HashMap.resize()扩容为原来容量的两倍,HashTable.rehash()扩容为原来的两倍+1;
- HashMap重新计算key的hash值,HashTable使用key.hashCode()。
// HashMap static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
// HashTable int hash = key.hashCode();
- HashMap求hash对应的位置索引使用与运算,HashTable则先与运算后取模。
// HashMap int index = (tab.length - 1) & hash
// HashTable int index = (hash & 0x7FFFFFFF) % tab.length;