Java源码解析之SortedMap和NavigableMap
一、前言
由于乱序的数据对查找不利,例如无法使用二分法等降低算法的时间复杂度,如果数据在插入时就排好序,查找的性能聚会提升很多。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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- 详解Java的Hibernat框架中的Map映射与SortedMap映射
- Java8时间接口LocalDateTime详细用法
- 浅谈Java8新特性Predicate接口
- Java8函数式接口的基础学习教程
- java接口使用默认方法的讲解
- Java 利用DeferredResult实现http轮询实时返回数据接口
- Java中的对象、类、抽象类、接口、继承之间的联系
- Java 利用枚举实现接口进行统一管理
- Java 枚举类和自定义枚举类和enum声明及实现接口的操作
- 五分钟带你了解Java的接口数据校验
- Java接口和抽象类有什么区别
- JAVA8之函数式编程Function接口用法
- JAVA Iterator接口与增强for循环的实现
相关文章
SpringCloud服务实现同时使用eureka和nacos方法
这篇文章主要介绍了SpringCloud服务实现同时使用eureka和nacos方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧2023-01-01Spring中的之启动过程obtainFreshBeanFactory详解
这篇文章主要介绍了Spring中的之启动过程obtainFreshBeanFactory详解,在refresh时,prepareRefresh后,马上就调用了obtainFreshBeanFactory创建beanFactory以及扫描bean信息(beanDefinition),并通过BeanDefinitionRegistry注册到容器中,需要的朋友可以参考下2024-02-02MyBatis映射文件resultMap元素中使用多个association的方法
这篇文章主要介绍了MyBatis映射文件resultMap元素中使用多个association的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03
最新评论