HashMap 和TreeMap

2019-11-06  本文已影响0人  陽光亽活力

一、简介

首先介绍一下什么是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. 两种常规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相同的比较器排序

  2. 两种常规Map性能
    HashMap:适用于在Map中插入、删除和定位元素。
    Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

  3. 总结
    HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap

上一篇 下一篇

猜你喜欢

热点阅读