浅析JAVA面试中常见问题之Map(一)

浅析JAVA面试中常见问题之Map(一)

JAVA面试常见问题,用于学习,借鉴和答疑,同时希望您能留下宝贵的意见和建议,共同进步

项目里常见使用的Map存储结果为HashMap,LinkedHashMap,CurrentHashMap,TreeMap等,每种Map存储结构,都有其应用的场景,通过了简单了解其内部结构,以及优缺点,以便能更好的在不同场景下使用。

一、Map类继承和实现接口关系图:

在这里插入图片描述

二、Map实现类简单介绍与使用场景

Map是Key,Value键值对的存储结构
  1. TreeMap:实现SortedMap接口,根据键排序,默认是按键值的升序排序。在项目里主要应用是排序展示,例如销量排名,自动派单员工信息等。
  2. HashMap:根据键的hashCode值存储数据, HashMap允许空键空值,但只允许一个空键,允许多条空值。HashMap非线程安全,可以有多个线程同时操作HashMap,会出现数据不一致的情况。初始容量为16,负载因子为0.75,大于12是自动扩容。
  3. LinkedHashMap:继承于HashMap,与HashMap不同点在于保存了数据的插入顺序,当数据再次获取展示时,插入数据顺序未发生变化。HashMap则每次展示数据的顺序具有随机性。LinkedHashMap
    在项目里应用于导表字段存放,可以保证表头一致性。
  4. ConcurrentHashMap:实现ConcurrentMap接口,线程安全,内部Segment继承ReentrantLock类,通过加锁释放锁来使线程安全。在项目里主要应用是数据多线程数据计算后存放。初始容量为16、负载因子为0.75和并发级别为16
  5. Hashtable:Hashtable是遗留类,与HashMap类似,继承于Dictionary类,线程安全,并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁。Hashtable不建议在代码中使用。

三、简单原因分析不同JDK版本数据存放结构

在JDK1.7时,HashMap的数据存放主要是链表形式,JDK1.8,HashMap的数据存放在8个数据时,依旧是链表,超过8个时,则转变为红黑树。主要是数据查询时间复杂度取决于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。

猜你喜欢

转载自blog.csdn.net/u013478983/article/details/113751077