1.HashMap是实现Java1.2引进的Map接口,而HashTable是继承自一个老旧类(Dictionary类);
2.HashMap方法不是同步的,要想实现同步必须给它添加一个外同步,而HashTable的方法是同步的,多个线程同时访问时,不需要为它的方法实现同步;
3.HashMap是非同步的,也是非线程安全的,它利用Collection类的静态方法Conllection.synchronizedMap()方法--同步包装器,创建一个线程安全的Map对象,并把它作为一个封装的对象来返回,这个方法有时也被称作有条件的线程安全——所有 单个的操作都是线程安全的,但是多个操作组成的操作序列却可能导致数据争用,因为在操作序列中控制流取决于前面操作的结果。因此,HashMap的效率较高(因为线程的安全是以牺牲性能而来的,为了保证线程的安全就需要通过不断加锁解锁来保证);
4.HashMap中去掉了HashTable中的contains()方法,加上了containsKey()和containsValue()方法;
5.HashMap是键值对的数据存储,它允许空键值,但是只允许只有一个键的时候为空,允许无数个值为空,而HashTable是表的数据存储,它不允许空。
网友评论