HashMap和Hashtable的区别
主要区别有:线程安全性,同步,速度。
1).HashMap几乎可以等价于Hashtable,除了HashMap是非同步的,并且可以接受null(key和value都可以为null,Hashtable不行)。
2).HashMap是非同步的,而Hashtable是同步的,这就意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable,而如果没有正确同步的话,
多个线程是不能共享HashMap的。Java5提出了ConcurrentHashMap,它是HashMap的替代,比HashMap的扩展性更好。
3).迭代器的区别:HashMap是Iterator是快速失败的(Fail-Fast),而Hashtable是enumerator是安全失败的(Fail-Safe)。
3.1)遍历过程中若有其他线程对HashMap进行修改(增加删除),会抛出同时修改异常ConcurrentModificationException,快速失败的迭代器是操作集合本身。
3.2)遍历过程中若有其他线程对Hashtable进行修改(增加删除),不会抛出异常,失败安全的迭代器是操作原集合的一个拷贝。
4).由于Hashtable是线程安全的也是同步的,所以单线程环境下它比HashMap慢。如果不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
5).HashMap不能保证随着时间的推移Map中的元素次序是不变的。
网友评论