热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javahashmaptreemap_关于java:HashMap和TreeMap有什么区别?

本问题已经有最佳答案,请猛点这里访问。我开始学习Java。我什么时候在树映射上使用哈希映射?StackOverflow不仅仅是针对提问者,

本问题已经有最佳答案,请猛点这里访问。

我开始学习Java。我什么时候在树映射上使用哈希映射?

StackOverflow不仅仅是针对提问者,也适用于寻求答案的其他人。因此,如果我在这里找到一个答案,也包含在一些我没有的书中,那对我来说是非常好的…

TreeMap是SortedMap的一个示例,这意味着可以对键的顺序进行排序,并且在对键进行迭代时,可以预期它们将按顺序排列。

另一方面,没有这样的保证。因此,在迭代HashMap的键时,您无法确定它们的顺序。

一般来说,HashMap会更有效,因此无论何时您不关心键的顺序,都可以使用它。

HashMap更省时。aTreeMap更节省空间。

treemap只适用于可比较的对象,hashmap只适用于具有适当hashcode()实现的对象。

@埃里克森:你能发布一个参考/链接来支持这个声明吗?

搜索复杂度为o(log(n)),HashMap为o(1)with a good hashcode()。

hashmap允许空键和空值(只允许一个空键)。如果treemap使用自然排序或其comparator,不允许空键,则会引发异常。

HashMap由哈希表实现,而TreeMap由Red-Black tree实现。HashMap和TreeMap之间的主要区别实际上反映了aHash和aBinary Tree之间的主要区别,也就是说,在迭代时,treemap保证可以是由元素的compareTo()方法或在treemap的cons中设置的比较器确定的键顺序。卡车司机。

看看下面的图表。

5bfeba89361ed46f9010821d4a9610f2.png

这意味着在Treemap中随机获取比哈希映射更快吗?

总结如下:

hashmap:查找数组结构,基于hashcode(),equals()实现,o(1)插入和搜索的运行时复杂性,未排序

treemap:树结构,基于compareto()实现,o(log(n))插入和搜索的运行时复杂性,排序

取自:hashmap与treemap

hashmap的复杂性是o(1+a)。在最坏的情况下,依赖于hashcode函数"a"可以达到"n"。

大多数情况下使用HashMap,但需要对密钥进行排序时(需要迭代密钥时)使用TreeMap。

我将在Java中讨论HashMap和TeReMAP实现:

hashmap——实现基本映射接口

由一个存储桶数组实现,每个存储桶都是一个条目的LinkedList

基本操作的运行时间:Put()、Average O(1)、Worst Case O(N),在调整表大小时发生;get()、remove()、Average O(1)

不同步,要同步它:Map m = Collections.synchronizedMap(new HashMap(...));

地图的迭代顺序是不可预测的。

treemap——实现可导航地图接口

由红黑树实现

基本操作运行时间:put()、get()、remove()、worst case o(lgn)

不同步,要同步它:SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));

提供有序迭代。higherkey()、lowerkey()可用于获取给定键的后续项和前置项。

总之,hashmap和treemap最大的区别在于treemap实现了NavigableMap,这提供了有序迭代的特性。此外,HashMap和TeeMeAP都是Java集合框架的成员。您可以研究Java的源代码,以了解更多关于它们的实现。

HashMap用于快速查找,而TreeMap用于映射上的排序迭代。

您几乎总是使用HashMap,如果您需要您的密钥按特定顺序排列,则只应使用TreeMap。

除了排序后的密钥存储,Treemap的另一个不同之处在于,开发人员可以用字符串键给出(string.case不区分大小写的顺序),因此比较器在对映射访问上的密钥进行比较时忽略键的大小写。对于hashmap,这是不可能给出这样的选项的-在hashmap中,它总是区分大小写的比较。

不需要。如果您真的想要这样做,您可以简单地为一个映射制作一个修饰器,对于所有涉及键输入的事情,您可以将其全部设置为大写/小写,并委托给已修饰的映射。这样做,就不难得到"不区分大小写"的哈希图。不管怎样,这个答案可能有点离题:你所说的只是Treemap的一个非常具体的用例,我不认为它作为hashmap/Treemap之间的比较是非常有意义的。



推荐阅读
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
一代天骄的小男人_580
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有