1、继承不同。Hashtable继承陈旧的Dictionary类,而HashMap继承抽象类AbstractMap实现Map接口。
2、线程安全不同。Hashtable是线程安全的,在多线程环境下可以直接使用,而HashMap是非线程安全的,在多线程环境下需要手动进行同步处理。
3、允不允许null值。Hashtable中Key和Value都不允许出现null值,否则会出现NullPoinerException异常。而在HashMap中,null可以作为键(Key),而且空的键只能有一个,同时可以有一个或多个键所对应的value值为null。
4、遍历方式的内部实现不同。HashMap和Hashtable都可以使用Iteration(迭代器)来实现,而Hashtable也可以用Enumeration(枚举)的方式进行遍历。
5、hash值的使用不同。HashMap通过hash函数重新计算hash值,而Hashtable直接使用hashCode。
6、内部实现方式的初始容量和扩容方式不一样。Hashtable的初始容量默认为11,扩容方式为old*2-1。而HashMap的初始容量默认为16,扩容方式为翻倍。