10.HashMap和Hashtable的区别
时间: 2023-02-27 12:47:53 浏览: 43
HashMap和Hashtable的主要区别在于它们的锁定策略。HashMap使用不可重入锁,而Hashtable使用可重入锁。另一个区别是HashMap允许空键和空值,而Hashtable不允许。
相关问题
8. HashMap 和 ConcurrentHashMap、 Hashtable 的区别
HashMap、ConcurrentHashMap和Hashtable都实现了Map接口,但它们之间有以下几个区别:
1. 线程安全性:Hashtable是线程安全的,而HashMap和ConcurrentHashMap则不是。ConcurrentHashMap通过分段锁的方式实现了线程安全。
2. 同步(synchronization):Hashtable使用synchronized关键字来保证线程安全,而HashMap和ConcurrentHashMap则没有使用synchronized关键字,因此在多线程环境下效率更高。
3. 速度:由于Hashtable使用了synchronized关键字,因此在多线程环境下效率较低,而HashMap和ConcurrentHashMap则没有这个问题,因此在多线程环境下效率更高。
4. 初始容量和扩容方式:Hashtable默认的初始容量为11,而HashMap默认的初始容量为16。Hashtable在扩容时将容量变为原来的2倍加1,而HashMap在扩容时将容量变为原来的2倍。
5. null值:Hashtable不允许key或value为null,而HashMap和ConcurrentHashMap则允许key或value为null。
6. 解决hash冲突方式不同:HashMap中,当出现冲突时使用链表+红黑树的方式存储,而Hashtable中则都是以链表方式存储。ConcurrentHashMap则使用了一种不同的方式来解决hash冲突,具体实现可以参考引用。
hashmap和hashtable区别
HashMap和Hashtable都是用于存储键值对的数据结构,但它们之间有以下区别:
1. 线程安全性:Hashtable是线程安全的,因为它的所有方法都是同步的,而HashMap则不是线程安全的。如果需要在多线程环境下使用HashMap,可以使用ConcurrentHashMap。
2. Null值:Hashtable不允许键或值为null,否则会抛出NullPointerException异常,而HashMap则允许null键和null值。
3. 继承关系:Hashtable是Dictionary类的子类,而HashMap是AbstractMap类的子类。
4. 性能:HashMap的性能通常比Hashtable要好,因为Hashtable在每个方法上都需要进行同步,而HashMap则不需要。
5. 迭代器:迭代器在遍历Hashtable时不会抛出ConcurrentModificationException异常,而HashMap可能会,因为它是非同步的。
综上所述,如果需要线程安全的存储结构,可以使用Hashtable,否则可以使用HashMap。