我在面试中碰到过这个问题、HashMap和HashTable的区别、自己查找过相关资料、也问过技术大牛、总结出以下几点:
HashMap继承AbstractMap,它是HashTable的轻量级实现,是非线程安全的,执行效率较高一些,允许Entry的Key或value为null,没有contains方法;
HashTable继承Dictionary,是线程安全的,执行效率低,不允许Entry的key或value为null,否则会出现异常NullPointerException,有contains方法。
需要注意的是:
Hashtale是Syncchronize的,而HashMap是Asyncchronize的,当多个线程访问Hashtable时,Hashtable不需要自己为它的方法实现同步;而当多个线程访问HashMap时,需要通过Collections.synchronizedMap来同步HashMap。