zoukankan      html  css  js  c++  java
  • 【深入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))
  • 相关阅读:
    DXF文件格式理解
    Qt Creator调试命令行参数
    qt编译错误:invalid new-expression of abstract class type "*"
    dxf文件解析库libdxf初探
    ubuntu linux编译libdxfrw
    CAD DWG/DXF文件C++解析库libdxfrw
    AutoCAD版本dxf文件与dxflib解析库支持探索
    Linux 6种日志查看方法(转)
    码率、分辨率、帧率和画质计算单位时间码流大小(转)
    纯手工打造车载车牌识别检测系统(转)
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286726.html
Copyright © 2011-2022 走看看