JDK容器学习之TreeMap (二) : 使用说明

TreeMap 使用说明

TreeMap 的底层数据结构为红黑树,主要是根据key进行排序,相比较于HashMap的数组+链表+红黑树的数据结构而言,二者的应用场景是有明显的区别的数组

1. TreeMap 的优势

1. 红黑树,先天支持排序

TreeMap 根绝key进行比较排序数据结构

  • 支持自定义实现的比较器
  • key实现 Comparable 接口

HashMap 无排序功能学习

2. 存储空间少

Treemap 红黑树中一个节点对应一个kv对,没有冗余无效的Node节点.net

HashMap 的数组中,可能存在较多的空位code

2. TreeMap 的缺点

1. 查询的时间复杂度

正常来说,TreeMap 的查询时间复杂度为 O(logN), 而HashMap为 O(1)blog

因此Map的元素越多,TreeMap根据key查询的效率会更低;排序

另外一方面,HashMap 在糟糕的状况下,可能退化为链表接口

2. 修改致使重排

TreeMap 每次新增or删除一个kv对,均可能致使红黑树的重排get

HashMap 当新增一个kv对,使得Map中的个数大于阀值时,须要对数组进行从新扩容效率

3. 使用场景

经过上面的优缺点对比,能够看出TreeMap和HashMap二者的使用场景差异算是比较大的

对Map中的kv对有排序需求时,选择 TreeMap, 这种场景下,尽可能保证如下几点

  • Map 元素基本保持不变(即不多添加和删除)
  • 主要用于遍历迭代获取数据
  • 不存在碰撞的状况(即两个不一样的key,根据比较器获取值不能为0)

相关博文

关注更多

扫一扫二维码,关注 小灰灰blog

https://static.oschina.net/uploads/img/201709/22221611_Fdo5.jpg

相关文章
相关标签/搜索