当前位置: 代码迷 >> 综合 >> HashMap LinkedHashMap Hashtable TreeMap 的区别,面试时如何回答
  详细解决方案

HashMap LinkedHashMap Hashtable TreeMap 的区别,面试时如何回答

热度:26   发布时间:2023-12-05 23:40:39.0

java为数据结构中的映射定义了一个接口java.util.Map,四个实现类分别是:HashMap Hashtable LinkedHashMap TreeMap 。

Map的实现类,键不允许重复,键重复时值就会被覆盖;值允许重复。

HashMap:

1.最多允许一条键为NULL,允许多条值为NULL。
2.插入、遍历无序;。
4.遍历速度与容量有关,而不是实际数据条数。
5不支持线程同步(线程不安全),多个线程写hashMap,可能导致数据不一致。
6.可使用Collections的synchronizedMap方法或ConcurrentHashMap使其具有同步能力。

LinkedHashMap :

1.是HashMap的子类,不支持线程同步(线程不安全)。
2.保存了插入记录,Iterator遍历时,先插入的先遍历到(先插入的先读取到)。
3.访问顺序,如果put和get已存在的Entry,都会把Entry移动到双向链表的表尾(其实是先删除再插入)4.遍历速度只与实际数据条数有关。
5,.基于以上几点,一般情况下,遍历时Hashtable比HashMap慢。例外:相同数据量下,当HashMap数据少但是容量大,此时HashMap可能比Hashtable慢。

Hashtable:

1.继承了Dictionary类。
2.不允许键或值为NULL.
3.支持线程同步(线程安全),同一时刻只允许一个线程写,因此写入慢。

TreeMap:

1.实现SortMap接口
2.默认按键的升序排序,也可以自定义排序,重新一个Comparator。Iterator遍历时得到的记录是排序过的。

总结:
如果无序,而且无线程安全问题,HashMap最快。
如果有序,而且无线程安全问题,可选LinkedHashMap 。
Hashtable线程安全,插入速度慢。
TreeMap有默认的升序排序。

  相关解决方案