对比分析HashMap、LinkedHashMap、TreeMap
2019-08-16 11:13:33来源:博客园 阅读 ()
对比分析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会非常方便 |
总结:
本文从线程安全、初始容量、存储结构、顺序规则、存储特点、插入效率、遍历效率、使用场景及举例。另外:前面提到的插入效率和遍历效率的高、较高都是在大数量的情况下,当数据量少的情况下基本没有区别,若有不对之处,请批评指正,望共同进步,谢谢!
原文链接:https://www.cnblogs.com/LiaHon/p/11249560.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- 代码对比工具,我就用这 6 个! 2020-06-10
- HashMap:源代码(构造方法、put、resize、get、remove、rep 2020-06-04
- 数据结构:用实例分析ArrayList与LinkedList的读写性能 2020-06-04
- Kotlin与java8的SAM转换对比 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash