8.6.9 各Map实现类的性能分析
8.6.9 各Map实现类的性能分析
Hashtable比HashMap慢
对于Map
的常用实现类而言,虽然HashMap
和Hashtable
的实现机制几乎一样,但由于Hashtable
是一个古老的、线程安全的集合,因此HashMap
通常比Hashtable
要快。
TreeMap比Hashtable慢
TreeMap
通常比HashMap
、 Hashtable
要慢(尤其在插入、删除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按插入顺序排序
LinkedHashMap
比HashMap
慢一点,因为它需要维护链表来保持Map
中key-value
时的添加顺序。
IdentityHashMap使用==判断key是否相等
IdentityHashMap
性能没有特别出色之处,因为它釆用与HashMap
基本相似的实现,只是它使用==
运算符来判断元素相等,而不是使用equals()
方法来判断元素相等。
EnumMap只能放入枚举值
EnumMap
的性能最好,但它只能使用同一个枚举类的枚举值作为key