JDK之TreeMap源码解读(一)

TreeMap是基于红黑树的Navigablemap实现,而NavigableMap继承于SortedMap接口。

SortedMap是基于一种基于其key进行排序的Map,其提供的接口方法如下:

方法摘要
Comparator<? super K>

comparator()

返回map中用来对key进行排序的comparator(比较器),如果map使用自然排序,则返回null

SortedMap<K,V>

subMap(K fromKey, K toKey)

返回SortedMap中从fromKey到toKey的子SortedMap

SortedMap<K,V>

headMap(K toKey)

返回SortedMap中key小于toKey的子SortedMap

SortedMap<K,V>

tailMap(K fromKey)

返回SortedMap中key大于或等于fromKey的子SortedMap

K

firstKey()

返回SortedMap中的第一个(最小的)key

K

lastKey()

返回SortedMap中的最后一个(最大的)key    

Set<K>

keySet()

返回SortedMap中所有的key组成的Set 

Collection<V>

values()

返回SortedMap中所有的value组成的Collection 

Set<Map.Entry<K, V>>entrySet()
返回SortedMap中所有的entry组成的Set

 

NavigableMap扩展了 SortedMap,具有了针对给定搜索目标返回最接近匹配项的导航方法。方法 lowerEntry、floorEntry、ceilingEntry 和 higherEntry 分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象,如果不存在这样的键,则返回 null。类似地,方法 lowerKey、floorKey、ceilingKey 和 higherKey 只返回关联的键。所有这些方法是为查找条目而不是遍历条目而设计的。 

可以按照键的升序或降序访问和遍历 NavigableMap。descendingMap 方法返回映射的一个视图,该视图表示的所有关系方法和方向方法都是逆向的。升序操作和视图的性能很可能比降序操作和视图的性能要好。subMap、headMap 和 tailMap 方法与名称相似的 SortedMap 方法的不同之处在于:可以接受用于描述是否包括(或不包括)下边界和上边界的附加参数。任何 NavigableMap 的 Submap 必须实现 NavigableMap 接口。

此外,此接口还定义了 firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它们返回和/或移除最小和最大的Entry(如果存在),否则返回 null。

subMap(K, K)、headMap(K) 和 tailMap(K) 方法被指定为返回 SortedMap,以允许现有 SortedMap 实现能相容地改进为实现 NavigableMap,但鼓励此接口的扩展和实现重写这些方法以返回 NavigableMap。类似地,可以重写 SortedMap.keySet() 以返回 NavigableSet。

其提供的接口方法如下:

方法摘要
Map.Entry<K,V>

lowerEntry(K key)

返回小于给定key的最大key对应的Entry。如果不存在,返回null

K

lowerKey(K key)

返回小于给定key的最大key。如果不存在,返回null

Map.Entry<K,V>

floorEntry(K key)

返回小于或等于给定key的最大key对应的Entry。如果不存在,返回null

K

floorKey(K key)

返回小于或等于给定key的最大key。如果不存在,返回null

Map.Entry<K,V>

ceilingEntry(K key)

返回大于或等于给定key的最小key对应的Entry。如果不存在,返回null

K

ceilingKey(K key)

返回大于或等于给定key的最小key。如果不存在,返回null

Map.Entry<K,V>

higherEntry(K key)

返回大于给定key的最小key对应的Entry。如果不存在,返回null

K

higherKey(K key)

返回大于给定key的最小key。如果不存在,返回null

Map.Entry<K,V>

firstEntry()

返回最小key对应的Entry。如果不存在,返回null

Map.Entry<K,V>

lastEntry()

返回最大key对应的Entry。如果不存在,返回null

Map.Entry<K,V>

pollFirstEntry()

删除并返回最小key对应的Entry。如果不存在,返回null

Map.Entry<K,V>

pollLastEntry()

删除并返回最大key对应的Entry。如果不存在,返回null

NavigableMap<K,V>

descendingMap()

返回map的一个逆向视图

NavigableSet<K>

navigableKeySet()

返回map的所有key的视图

NavigableSet<K>

descendingKeySet()

返回map的所有key的一个逆向视图

NavigableMap<K,V>

subMap(K fromKey, boolean fromInclusive,  K toKey,   boolean toInclusive)

返回map中从toKey到fromKey的一个视图

NavigableMap<K,V>

headMap(K toKey, boolean inclusive)

返回map中小于或等于toKey的一个视图

NavigableMap<K,V>

tailMap(K fromKey, boolean inclusive)

返回map中大于或等于fromKey的一个视图

SortedMap<K,V>

subMap(K fromKey, K toKey)

等同于subMap(fromKey, true, toKey, false)

SortedMap<K,V>

headMap(K toKey)

等同于headMap(toKey, false)

SortedMap<K,V>

tailMap(K fromKey)

等同于tailMap(fromKey, true)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值