Java源碼解析之SortedMap和NavigableMap
一、前言
由于亂序的數(shù)據(jù)對查找不利,例如無法使用二分法等降低算法的時間復(fù)雜度,如果數(shù)據(jù)在插入時就排好序,查找的性能聚會提升很多。sortedMap接口就是為這種有序的數(shù)據(jù)服務(wù)的。
二、sortedMap接口
sortedMap接口需要數(shù)據(jù)的key支持Comparable,或者可以被指定的Comparator接受。sortedMap主要提供了以下方法:
// 返回排序數(shù)據(jù)所用的Comparator Comparator<? super K> comparator(); // 返回在[fromKey, toKey)之間的數(shù)據(jù) SortedMap<K,V> subMap(K fromKey, K toKey); // 返回從第一個元素到toKey之間的數(shù)據(jù) SortedMap<K,V> headMap(K toKey); // 返回從fromKey到末尾之間的數(shù)據(jù) SortedMap<K,V> tailMap(K fromKey); //返回第一個數(shù)據(jù)的key K firstKey(); //返回最后一個數(shù)據(jù)的key K lastKey();
SortedMap主要提供了獲取子集,以及獲取最大值(最后一個值)和最小值(第一個值)的方法。但這僅僅是排序數(shù)據(jù)能提供的便利的一小部分,在接下來分析的NavigableMap中,我們還會看到更多的功能。
SortedMap提供了獲取最大值與最小值的方法,但對于一個已經(jīng)排序的數(shù)據(jù)集,除了最大值與最小值之外,我們可以對任何一個元素,找到比它小的值和比它大的值,還可以按照按照原有的順序倒序排序等。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();
到此這篇關(guān)于Java源碼解析之SortedMap和NavigableMap的文章就介紹到這了,更多相關(guān)Java SortedMap和NavigableMap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Java的Hibernat框架中的Map映射與SortedMap映射
- Java8時間接口LocalDateTime詳細(xì)用法
- 淺談Java8新特性Predicate接口
- Java8函數(shù)式接口的基礎(chǔ)學(xué)習(xí)教程
- java接口使用默認(rèn)方法的講解
- Java 利用DeferredResult實現(xiàn)http輪詢實時返回數(shù)據(jù)接口
- Java中的對象、類、抽象類、接口、繼承之間的聯(lián)系
- Java 利用枚舉實現(xiàn)接口進(jìn)行統(tǒng)一管理
- Java 枚舉類和自定義枚舉類和enum聲明及實現(xiàn)接口的操作
- 五分鐘帶你了解Java的接口數(shù)據(jù)校驗
- Java接口和抽象類有什么區(qū)別
- JAVA8之函數(shù)式編程Function接口用法
- JAVA Iterator接口與增強(qiáng)for循環(huán)的實現(xiàn)
相關(guān)文章
SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法
這篇文章主要介紹了SpringCloud服務(wù)實現(xiàn)同時使用eureka和nacos方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01Java中如何將符號分隔的文本文件txt轉(zhuǎn)換為excel
這篇文章主要介紹了Java中如何將符號分隔的文本文件txt轉(zhuǎn)換為excel,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Spring中的之啟動過程obtainFreshBeanFactory詳解
這篇文章主要介紹了Spring中的之啟動過程obtainFreshBeanFactory詳解,在refresh時,prepareRefresh后,馬上就調(diào)用了obtainFreshBeanFactory創(chuàng)建beanFactory以及掃描bean信息(beanDefinition),并通過BeanDefinitionRegistry注冊到容器中,需要的朋友可以參考下2024-02-02Java日常練習(xí)題,每天進(jìn)步一點點(48)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08MyBatis映射文件resultMap元素中使用多個association的方法
這篇文章主要介紹了MyBatis映射文件resultMap元素中使用多個association的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03springboot集成redis實現(xiàn)簡單秒殺系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了springboot集成redis實現(xiàn)簡單秒殺系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12