前几天,有一位粉丝在直播间问了我这样一个问题,说HashMap和TreeMap有什么区别。今天,我给大家分享一下我的理解。
专注于为中小企业提供成都网站设计、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业福田免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
我们知道不管是HashMap还是TreeMap,都是通过对象来对对象进行索引的Map集合。我们把用来索引的对象叫做Key,而索引对应的对象叫做Value。这就是我们平时说的键值对。它们的类关系如图所示:
关于HashMap和TreeMap的区别,我从以下4个方面来分析:
HashMap是基于哈希表+数组来实现的,而TreeMap是基于红黑树实现的。
使用HashMap需要键对象明确定义了hashCode()和equals()这两个方法,而且为了优化HashMap空间的使用,可以调整初始容量大小和扩容。
TreeMap没有大小设置选项,因为,红黑树结构总是处于平衡状态。
HashMap比TreeMap的性能更高。
HashMap的时间复杂度是O(1),它是通过哈希函数计算的哈希地址。
而TreeMap主要是保证数据平衡,时间复杂度是O(log2 n)。
HashMap和TreeMap都是非线程安全的。
如果在多线程并发情况下建议使用ConcurrentHashMap;
如果既要保证线程安全又要保证顺序,可以使用 Collections.synchronizedMap()方法转化为线程安全的集合。
HashMap是无序的,而TreeMap是有序的。
TreeMap适用于按自然顺序或自定义顺序遍历键的场景。
HashMap适用于在Map中插入、删除和定位元素。
日常开发建议多使用HashMap,只有在需要排序的时候才使用TreeMap。
最后,我把HashMap和TreeMap的更多详细区别,都整理在这张表中了,需要的小伙伴可以在我的个人主页中获取。
基础 |
哈希图 |
树状图 |
Definition |
HashMap是基于哈希表的Map接口实现。 |
TreeMap是Map接口的基于Tree结构的实现。 |
Interface Implements |
HashMap实现Map, Cloneable和Serializable接口。 |
TreeMap实现NavigableMap, Cloneable和Serializable接口。 |
空键/值 |
HashMap允许单个null键和多个null值。 |
TreeMap不允许使用空键, 但可以具有多个空值。 |
同质/异质 |
HashMap允许异构元素, 因为它不对键执行排序。 |
由于排序, TreeMap允许将齐次值作为键。 |
Performance |
HashMap比TreeMap更快, 因为它为诸如get()和put()之类的基本操作提供了O(1)的恒定时间性能。 |
与HashMap相比, TreeMap速度较慢, 因为它为大多数操作(如add(), remove()和contains())提供O(log(n))的性能。 |
数据结构 |
HashMap类使用哈希表。 |
TreeMap在内部使用Red-Black树, 这是一种自平衡二进制搜索树。 |
Comparison Method |
它使用Object类的equals()方法比较键。Map类的equals()方法将其覆盖。 |
它使用compareTo()方法比较键。 |
Functionality |
HashMap类仅包含诸如get(), put(), KeySet()等基本功能。 |
TreeMap类具有丰富的功能, 因为它包含如下功能:tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry()。 |
元素顺序 |
HashMap不维护任何顺序。 |
元素以自然顺序(升序)排序。 |
Uses |
当我们不需要按排序顺序的键值对时, 应使用HashMap。 |
当我们需要按排序(升序)顺序的键值对时, 应使用TreeMap |
好了,以上就是我对HashMap和TreeMap的理解。
文章题目:惊呆面试官的回答:HashMap和TreeMap的区别
当前链接:http://www.gawzjz.com/qtweb2/news31/18981.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联