HashMap与HashTale都实现了map接口,他们的区别主要在线程安全,synchronized同步,迭代器,速度这四个方面
-
线程安全
hashmap是非线程安全的,如果没有做正确的同步,多个线程是不可以共享一个hashMap的
hashtable是线程安全的,多个线程是可以共享一个hashtabel的
-
synchronized同步
hashmap是非synchronized,线程不安全的
hashtable是synchronized,也就是说只有一个线程可以更改hashtable,任何线程想要更改hashtable都要获得同步锁,其他线程要等待同步锁释放才可以获得同步锁,进而修改hashtable
-
迭代器
hashmap用的迭代器是iterator,是fast-fail,也就是当有其他的线程修改hashmap的结构的时候,这里修改结构就是指的是删除或者增加元素,会抛出异常ConcurrentModificationException,但是iterator自带的remove方法是不会抛出异常的
hashtable使用的是enumerator迭代器,不是fail-fast
-
速度
当单线程,hashmap的速度要比hashtable的速度快