Differences between HashMap and Hashtable

来源:互联网 发布:数据挖掘大牛 国科大 编辑:程序博客网 时间:2024/04/27 23:44

HashMap is used in the new framework instead of  HashTable, Hashtable is not part of the Java Collections Framework - it just provides a similar API.

There are several differences between HashMap and Hashtable:

  1. Hashtable is synchronized, whereas HashMap is not.
  2. Hashtable does not allow null keys or values. HashMap allows one null key and any number of null values
  3. Enumeration is used in HashTable, but Iterator used in  HashMap.

The upper are differences in appearance, there are also several differences in implement :

    1. The default size of hash array is 11 in Hashtable , the size to add is old*2+1. And the default size is 16 in HashMap, the size to add is 2^x
    2. The hashCode is different. HashTable directly uses the hashCOde of the key object:

int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;

And HashMap recomputs the hashCode:

int hash = hash(k);int i = indexFor(hash, table.length);static int hash(Object x) {int h = x.hashCode();h += ~(h << 9);h ^= (h >>> 14);h += (h << 4);h ^= (h >>> 10);return h;}static int indexFor(int h, int length) {return h & (length-1);}

原文:http://gaolei.me/archives/58