8.6.9 各Map实现类的性能分析

8.6.9 各Map实现类的性能分析

Hashtable比HashMap慢

对于Map的常用实现类而言,虽然HashMapHashtable的实现机制几乎一样,但由于Hashtable是一个古老的、线程安全的集合,因此HashMap通常比Hashtable要快。

TreeMap比Hashtable慢

TreeMap通常比HashMapHashtable要慢(尤其在插入、删除key-value对时更慢),因为TreeMap采用红黑树来管理key-value对(红黑树的每个节点就是一个key-value对)。

TreeMap会自动排序

使用TreeMap有一个好处: TreeMap中的key-value对总是处于有序状态,无须专门进行排序操作。

如何快速查找TreeMap中的key

  • TreeMap被填充之后,就可以调用keySet()方法,取得由key组成的Set,
  • 然后使用toArray()方法生成key的数组,
  • 接下来使用Arrays类的binarySearch方法就可以在已排序的数组中快速地查询key对象。

一般用HashMap

对于一般的应用场景,程序应该多考虑使用HashMap,因为HashMap正是为快速查询设计的(HashMap底层其实也是采用数组来存储key-value对)。

需要自动排序用TreeMap

但如果程序需要一个总是排好序的Map时,则可以考虑使用TreeMap.

LinkedHashMap按插入顺序排序

LinkedHashMapHashMap慢一点,因为它需要维护链表来保持Mapkey-value时的添加顺序

IdentityHashMap使用==判断key是否相等

IdentityHashMap性能没有特别出色之处,因为它釆用与HashMap基本相似的实现,只是它使用==运算符来判断元素相等,而不是使用equals()方法来判断元素相等。

EnumMap只能放入枚举值

EnumMap的性能最好,但它只能使用同一个枚举类的枚举值作为key