hashmap 和 hashtable继承
时间: 2023-11-11 16:00:15 浏览: 83
HashMap 和 Hashtable 都实现了 Map 接口,但它们的继承关系不同。HashMap 继承自 AbstractMap,而 Hashtable 继承自 Dictionary 类。
Dictionary 类是一个抽象类,已经被淘汰,不建议使用。它提供了一个键值对的映射,类似于 Map 接口。Hashtable 继承自 Dictionary 类,因此也被淘汰,不建议使用。
HashMap 继承自 AbstractMap,AbstractMap 实现了 Map 接口中的大部分方法,因此 HashMap 只需要实现少量方法即可。HashMap 是非线程安全的,不保证元素的顺序。
相关问题
hashmap和hashtable和concurrent
HashMap和Hashtable都是Java中的键值对存储容器,它们的作用都是用来存储一组键值对,其中键是唯一的,值可以重复。然而它们之间也有一些区别:
1.线程安全:Hashtable是线程安全的,而HashMap是非线程安全的。如果在多线程环境下需要使用HashMap,则需要使用ConcurrentHashMap类。
2.null键和null值:HashMap允许null键和null值,而Hashtable不允许。如果尝试将null值或null键插入到Hashtable中,则会抛出NullPointerException异常。
3.继承关系:HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。
ConcurrentHashMap是在HashMap的基础上进行了改进,它是线程安全的,并且在多线程环境下性能更好。它的主要特点是采用了分段锁机制,将整个Map分成了若干个小的Map,每个小Map都有自己的锁,这样在多线程环境下,不同的线程可以同时访问不同的小Map,从而大大提高了并发性能。
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。
阅读全文