暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java中HashMap和Hashtable的区别

程序猿集锦 2021-06-24
640

HashMapHashtable的区别:

  1. HashTable产生于JDK1.1,HashMap产生于JDK1.2。从时间的维度上来看,HashMap要比HashTable出现得晚一些。

  2. 从图中可以看出,两个类的继承体系有些不同。虽然都实现了Map、Cloneable、Serializable三个接口。但是HashMap继承自抽象类AbstractMap,HashTable继承自抽象类Dictionary。其中Dictionary类是一个已经被废弃的类。

  3. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),Hashtable则不行)

  4.  HashMap是非synchronized,Hashtablesynchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。

  5. 另一个区别是HashMap的迭代器(Iterator)fail-fast迭代器,而Hashtableenumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是EnumerationIterator的区别。

  6. 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。HashMap不能保证随着时间的推移Map中的元素次序是不变的。


两者的家谱图如下:


示例:


运行结果如下:


以上是我自己的理解,如果有不正确的地方,欢迎指正。


文章转载自程序猿集锦,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论