• 【深入Java基础】各个Map类的比较与总结


    各个Map类的比较与总结


    本文主要对
    HashMap,
    LinkedHashMap,
    TeeeMap,
    WeakHashMap,
    IdentityHashMap
    进行对比分析。


    Map : 以key-value键值对的形式存储数据,通过key获取value。是一种无序的数据结构。


    一、HashMap

    HashMap是最常用的一种map。它有以下特点:

    1.内部数据存储使用数组+链表实现(1.8之后为了解决大量hash冲突,引入了红黑树)

    2.采用链地址法解决hash冲突。

    3.键值对是无序排列的(除非hash值有序)。要想转化为有序排列可利用Collections.sort()实现。

    4.key和value都允许为null。并且只允许一个key为null,但允许多个value为null。

    5.不是同步的。要想变为同步需要手动加锁或者使用Collections.synchronizedMap()返回一个同步的map。

    二、LinkedHashMap

    LinkedHashMap是一种有序的HashMap,继承自HashMap,内部实现原理和HashMap极为相似。它有以下特点:

    1.它是有序的map,即“插入有序”和“访问有序”。LinkedHashMap内部比HashMap多了一个双链表来维护这种顺序关系。所以它的性能要弱于HashMap。

    2.它不是同步的。而Hashtable是同步的(它们的内部数据结构相似)

    3.key和value都允许为null。并且只允许一个key为null,但允许多个value为null。

    三、TreeMap

    TreeMap是一种有序的Map。内部采用红黑树存储数据。它有一下特点:

    1.内部采用红黑树实现。

    2.可以重写compare()方法实现升序或者降序排列。

    3.它不是同步的。

    四、WeakHashMap

    WeakHashMap即“弱HashMap”。它与HashMap的主要区别如下:

    HashMap保留key所引用的对象,除非hashmap对象销毁否则key所引用的实际对象不会被回收。而WeakHashMap的key所引用的对象可能被回收,回收之后会自动删除entry键值对。

    五、IdentityHashMap

    IdentityHashMap即“一致的HashMap”,也就是当两个key严格相等,即为同一对象(key1==key2)时才认为是同一key。

    六、比较

    HashMap Hashtable LinkedHashMap TreeMap
    数据结构 数组+链表 数组+链表 数组+链表+双向链表 红黑树
    有序性 无序 无序 有序 有序
    可否为null key和value都可为null key和value都不可为null key和value都可为null key和value都可为null
    同步性 不同步 同步 不同步 同步
    时间复杂度 插入O(1),查找O(1) 插入O(1),查找O(n²) 插入O(1),查找O(log(n)) 插入O(1),查找O(log(n))
  • 相关阅读:
    1351. 统计有序矩阵中的负数
    剑指 Offer 56
    39. 组合总和
    1619. 删除某些元素后的数组均值
    1380. 矩阵中的幸运数
    216. 组合总和 III
    面试题 08.03. 魔术索引
    1518. 换酒问题
    Xcode多进程调试:WKWebView
    Xcode编译WebKit
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286726.html
Copyright © 2020-2023  润新知