崔先森

导航

HashMap、HashTable的区别

HashMap和HashTable都实现了Map接口,但是要用哪个要分清它们之间的区别。

它们的主要区别:线程安全性、速度

  1. HashMap几乎可以等价于HashTable除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
  2. Hashmap是非线程安全的,而HashTable是线程安全的。要想让HashMap实现线程安全,一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
  3. HashMap可以有空的键值对(key为null,Value为null),而HashTable不能有空的键值对
  4. 由于HashTable是线程安全的也是synchronize,所以在单线程环境下HashTable比HashMap要慢。如果不需要同步,单一线程的情况下,HashTable的性能比HashMap差
  5. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。

posted on 2017-05-08 18:22  崔先森  阅读(297)  评论(0编辑  收藏  举报