JAVA - TreeMap与TreeSet

TreeMap

  • 线程不安全,基于红黑树实现的有序集合。
  • 集合顺序默认为自然排序,也可以自定义比较器实现排序规则。
  • 实现NavigableMap接口,实现一些了系列导航定位方法。
  • 集合操作开销在 O(LogN)【containkey\get\put\remove】。
  1. Get方法过程
    使用key在红黑树中进行遍历查找,如果Key小于树节点中的key值,则进入左子树继续查找。Key大于树节点中的key值则进入右子树查找,直到找到为止。

  2. Put方法过程
    如果Root节点为空,则插入的kv对,保存在Root节点中。
    如果Root不为空,则遍历红黑树,检测树中是否存在该Key:
    如果存在,则更新Key对应的Value。
    如果不存在,则根据插入KEY值与树节点比较大小的结果,插入树节点的左边【小于】或右边【大于】。
    最后调整树的使红黑树平衡。

  3. TreeMap的排序顺序
    默认情况下使用Key的自然序【Key类实现Comparable接口】进行排序构建红黑树。
    也可实现Comparator接口,实现自定义比较器,自定义排序规则。

  4. 关于GetFirstEntry、GetLastEntry方法
    First取得是红黑树中最左边的孩子节点。
    Last取得是红黑树中最右边的孩子节点。

  5. 关于ceilingEntry方法
    取得大于等于Key节点中的最小值。

  6. 关于containsValue方法的遍历顺序
    该方法判断传入的VALUE在红黑树中是否存在,使用中序“左根右”的方式【从小到大】遍历树。【其中root节点的父节点为NULL】

  7. 支持的子集合类型
    NavigableSubMap【升序、降序导航子集合视图】
    EntrySet:树中的所有节点【一个节点包含K\V】可视为一个集合。
    KeySet:树中所有节点的Key可视为一个集合。且该集合实现了NavigableSet接口。
    Values: 树种所有节点的Values作为Collection,允许重复的值。

  8. 关于NavigableMap
    扩展自Sortedmap接口,定义一系列导航定位的方法【匹配最接近值的方法】。
    比如:LowerXXX、HigherXXX、FloorXXX、CeilingXXX
    以及定义了返回多种子集合的方法。
    比如:SubMap、HeadMap、TailMap。

  9. 和LinkedHashMap比较
    LHM更适合做LRU缓存,其顺序是按插入或访问时顺序确定。
    TM按自然序、或自定义规则进行排序,插入元素时按排序规则插入树种,可使用迭代器按顺序取出,适合做升序、降序排名。
    TM比LHM【HM】占用内存空间更小,因为基于HashMap的数组中存在大量未使用的空槽位。
    LHM集合操作比TM要快,但TM没有LHM扩容时重HASH的开销。

TreeSet

线程不安全,基于TreeMap【底层使用红黑树】实现的、存储非重复元素的、有序集合。

  • TreeSet底层实现通过关联TreeMap对象实现。
  • 大部分方法实现都使用TreeMap提供的方法,相当于一个包装器。
  • 元素顺序支持按自然序或比较器进行排序。
  • 继承自NavigableSet接口,提供导航方法支持。【NavigableSet接口扩展自SortedSet接口】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值