zoukankan      html  css  js  c++  java
  • 对比分析HashMap、LinkedHashMap、TreeMap

    前面花了4章对HashMap、LinkedHashMap以及TreeMap的原理实现进行了讲解,本章对它们进行简单的对比分析。

    这里简单提一下,为什么前面没有单独一章来讲HashTable,HashTable是基于陈旧的Dictionary来实现的,效率上比起HashMap差很多,同时其唯一的优势“线程安全”的实现机制效率也是非常差的,现在一般都用ConcurrentHashMap,所以这个类基本上已经算是废弃了。

    下面通过一个表格从各方面对比分析HashMap、LinkedHashMap、TreeMap

    HashMap LinkedHashMap TreeMap
    原理 HashMap扩容机制及存取原理 LinkedHashMap如何保证顺序性 TreeMap原理实现及常用方法
    线程安全
    初始容量 16 16 0
    存储结构 数组+链表/红黑树 数组+链表/红黑树,HashMap子类 红黑树
    顺序规则 取值无顺序 取值按插入的顺序/按修改的顺序,根据accessOrder控制 插入时按key的自然顺序或者自定义顺序
    存储特点 最多一条记录的key为null,可以多条记录value为null 最多一条记录的key为null,可以多条记录value为null 当为key的自然顺序存储时key不能为null,当自定义顺序时,通过传入的Comparator的实现控制
    插入效率 较高(因为需要不断Compare比较)
    遍历效率 较高(遍历后会改变存储顺序) 较高
    使用场景 使用最多,绝大多数无需排序的情况都可使用 需要插入的顺序和取出的顺序一样的情况下 需要按照key的自然顺序甚至于自定义顺序的情况下
    使用场景举例 - 如我们对领导进行排名,对城市的经济发展进行排名等 如我们要展示周一到周五的消费情况,数据库里只取到了周二、周五的消费统计数据,这时将数据库的统计数据和手动构建消费为0的周一、三、五的数据按顺序组装,这时用TreeMap会非常方便

    总结:

    本文从线程安全、初始容量、存储结构、顺序规则、存储特点、插入效率、遍历效率、使用场景及举例。另外:前面提到的插入效率和遍历效率的高、较高都是在大数量的情况下,当数据量少的情况下基本没有区别,若有不对之处,请批评指正,望共同进步,谢谢!

  • 相关阅读:
    【JS基础】数组
    【JS基础】循环
    【JS基础】DOM操作
    移动端字体
    【JQ基础】
    【JS基础】
    WebBrowser.DocumentText引发FileNotFound异常
    抽取网络信息进行数据挖掘 建立语料库
    文本分类和聚类有什么区别?
    C# 读取网页源代码
  • 原文地址:https://www.cnblogs.com/LiaHon/p/11249560.html
Copyright © 2011-2022 走看看