Map的四种常用实现类的区别

    xiaoxiao2025-03-31  13

    Map的四种常用实现类的区别

    在Java学习中,Map接口主要用四种实现类。分别是HashMap,Hashtable,linkedHashMap,ConcurrentHashMap。这篇文章就来讲讲这四类的区别。

    HashMap

    这是平时使用最多的类。 它的底层实现是数组+链表,key和value都可以储存null。 初始内存大小为16.一般是元素总数到达大小的一半的时候进行扩容。 计算index方法:index = hash & (tab.length – 1)。 线程不安全,但效率较高

    Hashtable

    它的底层实现是数组+链表,key和value不可以存储null。 初始大小为11. 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length。 线程安全,但效率较低。

    ConcurrentHashMap

    它的底层实现是分段数组+链表 Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术 通过把整个Map分为N个Segment,可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。

    linkedHashMap

    LinkedHashMap可以认为是HashMap和LinkedList合体,即它既使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序。 LinkedHashMap是HashMap的子类。 它的元素按照插入顺序排列。 遍历速度较慢。

    最新回复(0)