`
tomcat_oracle
  • 浏览: 317015 次
社区版块
存档分类
最新评论

Java中HashMap和TreeMap的区别深入理解

    博客分类:
  • Java
阅读更多
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。
  HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
  HashMap 非线程安全 TreeMap 非线程安全
  线程安全
  Java里,线程安全一般体现在两个方面:
  1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable
  (后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
  2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。
  1.AbstractMap抽象类和SortedMap接口
  AbstractMap抽象类:(HashMap继承AbstractMap)覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。映射的哈希码是映射元素哈希码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的哈希码。
  SortedMap接口:(TreeMap继承自SortedMap)它用来保持键的有序顺序。SortedMap接口为映像的视图(子集),包括两个端点提供了访问方法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeMap类是它的唯一一份实现。
  2.两种常规Map实现
  HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。
  (1)HashMap(): 构建一个空的哈希映像
  (2)HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射
  (3)HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像
  (4)HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像
  TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。
  (1)TreeMap():构建一个空的映像树
  (2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素
  (3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序
  (4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序
  3.两种常规Map性能
  HashMap:适用于在Map中插入、删除和定位元素。
  Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
  4.总结
  HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。
11
3
分享到:
评论
1 楼 bitray 2014-05-27  
linkedhashmap呢?

相关推荐

    java HashMap,TreeMap与LinkedHashMap的详解

    在Java编程语言中,`HashMap`、`TreeMap`和`LinkedHashMap`都是`java.util.Map`接口的实现,它们提供了不同的数据存储和访问策略。本文将深入探讨这三种数据结构的特点、工作原理以及适用场景。 1. **HashMap** `...

    TreeMap in Java_java_treemap_

    Java中的`TreeMap`是一个基于红黑树(Red-Black Tree)数据结构的有序映射容器。它维护了键的自然顺序或者根据提供的比较器进行排序。...阅读"TreeMap in Java.pdf"文档将进一步深入理解其内部工作原理和高级用法。

    Java 编程从零到精通的综合训练营.zip

    Java 编程从零到精通的综合训练营课程涵盖的主题第 1 部分让我们来了解 Java第 2 节Java 中的原始数据类型第 3 节Java 程序执行时幕后发生了什么...19 节Java 中的泛型第 20 节深入研究 Map、HashMap、TreeMap、LinkedH

    java集合框架详解以及区别

    在本篇文章中,我们将深入探讨Java集合框架中的主要接口和类,以及它们之间的区别。 首先,Java集合框架的核心接口包括`Collection`、`List`、`Set`和`Map`。`Collection`是最基本的接口,它是所有单值容器的父接口...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    ava基础 基础知识 ...Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb

    java集合使用实例

    本资源聚焦于Java集合中的四个关键类:HashSet、TreeSet、HashMap和TreeMap,它们分别代表了不同类型的集合容器。 1. **HashSet**:HashSet是一个不允许重复元素的无序集合。它基于哈希表实现,插入和查找操作的...

    java编程深入研究

    集合框架是Java库的核心部分,包括List、Set和Map接口以及它们的实现类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap和TreeMap等。了解它们的特点和应用场景,以及泛型、迭代器和流API的使用,能够提高代码...

    Java Android开发:深入解析Java集合框架及其应用场景

    适合人群:具备Java编程基础的Android开发者,特别是希望深入了解集合框架原理和性能优化的技术人员。 使用场景及目标:① 理解集合框架的内部实现和性能特征,优化数据管理和应用性能;② 学习如何在Android开发中...

    hashmap.zip

    《深入理解Java HashMap》 HashMap是Java编程语言中一个重要的数据结构,属于集合框架的一部分,提供了高效的键值对存储和查找功能。它基于哈希表原理实现,允许我们以O(1)的时间复杂度进行插入、删除和查找操作。...

    java对象容器(涉及HashMap,ArrayList,Set等)

    在Java中,最常见的对象容器包括ArrayList、List、Set和HashMap等。这些容器各自具有不同的特性和用途,理解并熟练掌握它们对于提升Java编程能力至关重要。 ArrayList是Java集合框架中的一个动态数组,它允许我们在...

    java api中文/英文

    例如,集合框架是Java编程中非常重要的部分,它包括了List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口和实现,这些容器类帮助我们组织和管理数据。 在实际开发中,...

    HashMap资料.zip

    在面试中,HashMap的深入理解往往被视为衡量开发者基础扎实的重要标准。本资料将全面解析HashMap的工作原理、实现机制以及相关的面试知识点。 HashMap的核心特性是通过哈希算法快速定位元素,提供O(1)的平均时间...

    Java面试题和练习题

    3. 多态:深入理解多态的概念,包括方法的重写(override)和重载(overload)。 4. 接口:了解接口的定义、实现方式,以及接口与抽象类的区别。 5. 包:理解包的作用,如何导入和使用包内的类。 三、集合框架 1...

    Java面向对象编程与集合框架:Map接口与泛型的应用解析

    重点探讨了 Java集合框架中的 Map接口及其主要实现类(HashMap、TreeMap、LinkedHashMap),并通过示例代码展示它们的使用方法。文章还深入讨论了泛型在 Map中的应用及其优缺点,最后介绍了一些高级用法,如自定义 ...

    java从入门到深入

    - **Map接口的实现类**:TreeMap、ConcurrentHashMap等,并了解它们的区别。 12. **IO与NIO** - **传统IO**:理解字节流和字符流,学习流的链接和转换。 - **NIO(非阻塞I/O)**:理解选择器、通道和缓冲区,...

    java编程基础笔记(集合)

    Java编程基础笔记主要聚焦在集合框架上,这是Java编程中不可或缺的部分。集合框架是Java提供的一组接口和类,用于存储和操作...在实际的学习过程中,结合这些图片和文字笔记,可以加深对Java集合的理解,提升编程能力。

Global site tag (gtag.js) - Google Analytics