一、前言

由于乱序的数据对查找不利,例如无法使用二分法等降低算法的时间复杂度,如果数据在插入时就排好序,查找的性能聚会提升很多。sortedmap接口就是为这种有序的数据服务的。

二、sortedmap接口

sortedmap接口需要数据的key支持comparable,或者可以被指定的comparator接受。sortedmap主要提供了以下方法:

// 返回排序数据所用的comparator
comparator<? super k> comparator();

// 返回在[fromkey, tokey)之间的数据
sortedmap<k,v> submap(k fromkey, k tokey);

// 返回从第一个元素到tokey之间的数据
sortedmap<k,v> headmap(k tokey);

// 返回从fromkey到末尾之间的数据
sortedmap<k,v> tailmap(k fromkey);

//返回第一个数据的key
k firstkey();

//返回最后一个数据的key
k lastkey();

sortedmap主要提供了获取子集,以及获取最大值(最后一个值)和最小值(第一个值)的方法。但这仅仅是排序数据能提供的便利的一小部分,在接下来分析的navigablemap中,我们还会看到更多的功能。

sortedmap提供了获取最大值与最小值的方法,但对于一个已经排序的数据集,除了最大值与最小值之外,我们可以对任何一个元素,找到比它小的值和比它大的值,还可以按照按照原有的顺序倒序排序等。navigablemap就为我们提供了这些功能。

三、navigablemap接口

我们来看看navigablemap主要有哪些方法

// 找到第一个比指定的key小的值
map.entry<k,v> lowerentry(k key);

// 找到第一个比指定的key小的key
k lowerkey(k key);

// 找到第一个小于或等于指定key的值
map.entry<k,v> floorentry(k key);

// 找到第一个小于或等于指定key的key
k floorkey(k key);

//  找到第一个大于或等于指定key的值
map.entry<k,v> ceilingentry(k key);

k ceilingkey(k key);

// 找到第一个大于指定key的值
map.entry<k,v> higherentry(k key);

k higherkey(k key);

// 获取最小值
map.entry<k,v> firstentry();

// 获取最大值
map.entry<k,v> lastentry();

// 删除最小的元素
map.entry<k,v> pollfirstentry();

// 删除最大的元素
map.entry<k,v> polllastentry();

//返回一个倒序的map
navigablemap<k,v> descendingmap();

// 返回一个navigable的key的集合,navigableset和navigablemap类似
navigableset<k> navigablekeyset();

// 对上述集合倒序
navigableset<k> descendingkeyset();

到此这篇关于java源码解析之sortedmap和navigablemap的文章就介绍到这了,更多相关java sortedmap和navigablemap内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!