HashMap与HashTable的区别

119 阅读1分钟

HashMap与HashTale都实现了map接口,他们的区别主要在线程安全,synchronized同步,迭代器,速度这四个方面

  1. 线程安全

    hashmap是非线程安全的,如果没有做正确的同步,多个线程是不可以共享一个hashMap的

    hashtable是线程安全的,多个线程是可以共享一个hashtabel的

  2. synchronized同步

    hashmap是非synchronized,线程不安全的

    hashtable是synchronized,也就是说只有一个线程可以更改hashtable,任何线程想要更改hashtable都要获得同步锁,其他线程要等待同步锁释放才可以获得同步锁,进而修改hashtable

  3. 迭代器

    hashmap用的迭代器是iterator,是fast-fail,也就是当有其他的线程修改hashmap的结构的时候,这里修改结构就是指的是删除或者增加元素,会抛出异常ConcurrentModificationException,但是iterator自带的remove方法是不会抛出异常的

    hashtable使用的是enumerator迭代器,不是fail-fast

  4. 速度

    当单线程,hashmap的速度要比hashtable的速度快