① 继承不同
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
②HashTable线程同步,HashMap非线程同步。
③HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。
④Hashtable的迭代器Enumeration不是fail-fast的。HashMap的迭代器Iterator是fail-fast迭代器,当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。
⑤HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。
⑥哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。
TreeMap能够把它保存的记录根据键排序,默认是按升序排序。