getCeilingEntry()/getFloorEntry 获取[low,key]/[key,high]的最大/小值,没有返回null

getCeilingEntry()/getFloorEntry 获取[low,key]/[key,high]的最大/小值,没有返回null

  TreeMap是一个直接由红黑树实现的结构,对于Key值得比较来排序,显然得到:

  1.key的class必须实现comparable方法, 不能抛出ClassCastException异常,否则必须指定一个comprartor

  2.由于TreeMap实现了Serializable接口,所以默认的或者自定义的comparator也应该实现该接口

  最重要的是,实现了NavigableMap,我理解为导航map,提供了各种操作map视图的操作

  四个构造方法,其实就是是否使用默认的compatator

  对于无序Map,直接调用putAll,有序的SortedMap话递归调用buildFromSorted,提高效率

  但是putAll依然判断了map instanceof SortedMap

  具体的红黑树的操作在此不作赘述

  remove(),put()最根本的操作是红黑树的操作,get()也是二叉搜索树比较直观的实现

  有关树的操作的方法,其实就是代码分支比较多,需要考虑各种情况然后转换为代码就好了比较的话看如果有comparator就用,没有就用key默认的comparable在containsValue()从第一个节点开始successor遍历在forEach()从第一个节点开始successor遍历replaceAll()从第一个节点开始successor遍历赋值新的valueremove()遍历找出Object删除

  跟getCeilingEntry一样的只不过对于相等的情况,不考虑相等的情况

  底层由DescendingSubMap()实现,其实还是这个map,只不过对于所有的操作,比如getfist(),会将其转换为getLast()来执行,所以对于DescendingMap()的操作依然会影响原Map

  同样的,subMap()的操作也会影响原Map

  正常map调用的是AscendingSubMap,跟DescendingMap相同,只是相反的实现

推荐阅读