【JDK1.8】JDK1.8集合原始碼閱讀——TreeMap(一)
一、前言
在前面兩篇隨筆中,我們提到過,當HashMap的桶過大的時候,會自動將連結串列轉化成紅黑樹結構,當時一筆帶過,因為我們將留在本章中,針對TreeMap進行詳細的瞭解。
二、TreeMap的繼承關係
下面先讓我們來看一下TreeMap的繼承關係,對它有一個大致的瞭解:
可以看到,除了在之前HashMap裡常見的繼承類和介面以外,TreeMap實現了NavigableMap介面,而NavigableMap繼承自SortedMap,由名字可以看出,只是一個用來實現排序的介面。而這也是為什麼TreeMap能夠實現排序的原因。由於篇幅關係,將TreeMap的原始碼解析分為三部分,本章將對介面NavigableMap以及SortedMap進行解析。
三、SortedMap介面原始碼解析
3.1 SortedMap介面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public interface SortedMap<K,V>
extends Map<K,V>
{
//返回用於對鍵的進行排序的比較器,如果此對映使用其鍵的自然排序,則為null
Comparator<?
super K>
comparator(); //返回從fromKey(包括)到toKey(不包括)之間的map
SortedMap<K,V>
subMap(K fromKey, K toKey);
//返回小於toKey的map
SortedMap<K,V>
headMap(K toKey);
//返回大於或等於fromKey的map
SortedMap<K,V>
tailMap(K fromKey);
//返回map中第一個(最低)鍵
K
firstKey();
//返回map中最後一個(最高)鍵
K
lastKey();
Set<K>
keySet(); Collection<V>
values();
Set<Map.Entry<K,
V>> entrySet();
}
|
SortedMap的介面比較簡單,沒有很特別的地方,唯一比較特別的就是返回Comparator這個介面,可以設想實現排序功能的祕密或許就藏在此處。下面讓我們來看一下Comparator和Comparable介面,兩者之間有點關聯,可以理解為Comparable自帶了比較功能,而Comparator是賦予沒有比較能力的物件一種比較能力。舉個簡單例子:面對一道計算題,小明天生口算能力很強,看一眼就能算出來答案。而小李沒有這種能力,需要藉助計算器才能得出答案。
3.2 Comparable介面
先讓我們看下它的程式碼:
1 2 3 4 |
public interface Comparable<T>
{
//如果小於o,返回負數;等於o,返回0;大於o返回正數。
public int compareTo(T
o);
}
|
對,就是這麼簡單,裡面傳入一個泛型T的物件o,對o進行比較。如果小於o,返回負數;等於o,返回0;大於o返回正數。
我們熟悉的很多物件如String
,Integer
,Double
等都實現了這個介面。可以來看一下簡單的例子:
1
2
3
4
相關推薦【JDK1.8】JDK1.8集合原始碼閱讀——TreeMap(一)一、前言 在前面兩篇隨筆中,我們提到過,當HashMap的桶過大的時候,會自動將連結串列轉化成紅黑樹結構,當時一筆帶過,因為我們將留在本章中,針對TreeMap進行詳細的瞭解。 二、TreeMap的繼承關係 下面先讓我們來看一下Tre 【MySQL資料庫】效能優化之索引及優化(一)一、Mysql效能優化之影響效能的因素 1.商業需求的影響 不合理的需求造成的資源投入產出,這裡就用一個看上去很簡單的功能分析。需求:一個論壇帖子的總量統計,附加要求:實時更新。從功能上看來是非常容易實現的,執行一條select count(*)from表名就可以得到結果,但是如果我們採 【Flutter教程】從零構建電商應用(一)在這個系列中,我們將學習如何使用google的移動開發框架flutter建立一個電商應用。本文是flutter框架系列教程的第一部分,將學習如何安裝Flutter開發環境並建立第一個Flutter應用,並學習Flutter應用開發中的核心概念,例如widget、狀態等。 本系列教程包含如下四個部分,敬請期待: 【機器學習】資料探勘演算法——關聯規則(一),相關概念,評價指標綜述: 資料探勘是指以某種方式分析資料來源,從中發現一些潛在的有用的資訊,所以資料探勘又稱作知識發現,而關聯規則挖掘則是資料探勘中的一個很重要的課題,顧名思義,它是從資料背後發現事物之間可能存在的關聯或者聯絡。 關聯規則的目的在於在一個數據集中找出項之間的關 【webpack系列】從零搭建 webpack4+react 腳手架(一)搭建一個React工程的方式有很多,官方也有自己的腳手架,如果你和我一樣,喜歡刨根究底,從零開始自己一行一行程式碼建立一個React腳手架專案,那你就來對地方了。本教程是針對React新手,以及對webpack還不熟悉的使用者,或者是想了解當前前端工程化方案的使用者。我會在整個系列通過webpack4的 【編譯原理】語法制導翻譯之屬性文法(一)最近對程式語言如何從 原始碼->位元組碼(or 機器碼)->執行 產生了興趣,為此從今天開始,給自己制定了一個學習計劃, 目的是能夠對Java原始碼如何到class檔案位元組碼,再如何在JVM上執行有比較深入的理解。 學習的第一步,就從難啃的編譯原理開始。 之前 【影象處理】使用OpenCV進行影象處理教程(一)OpenCV是進行影象處理的工具,也是計算機視覺領域近十幾年不斷髮展和完善的產物。面對這個已基本成熟的開源庫知識體系,我們新生代有必要不斷地總結、回顧,以新的視角快速融入計算機視覺的奧祕世界。 從這篇隨 Hadoop Yarn原始碼閱讀系列(一)Yarn架構Yarn的基本思想是將JobTracker的兩大主要職能:資源管理、作業排程/監控拆分為兩個獨立的程序:一個全域性的ResourceManager和與每個應用對應的ApplicationMaster(AM)。ResourceManager和每個節點的NodeManager(NM)組成了全新的通用作業 Spark 原始碼閱讀學習(一)寫本文的目標就是立下 flag :好好研讀 Spark 原始碼,從 branch-0.7 這個分支開始。 如何通過閱讀原始碼提高自己 大家都說要多讀優秀開源框架的原始碼,那麼怎麼讀呢?像 Apache Spark 在 GitHub 上有兩萬多個 commit JDK1.8原始碼解析-HashMap(一)JDK1.8原始碼解析-HashMap I 本文主要介紹了JDK1.8中HashMap的實現原理,對部分常用的API進行原始碼解讀,網上該主題的資源非常多,作者參考了很多相關文章不在文中一一列舉了,在此基礎上加入了自己對部分原始碼的理解。 1. Ha 【安卓本卓】Android系統原始碼篇之(一)原始碼獲取、原始碼目錄結構及原始碼閱讀工具簡介前言 古人常說,“熟讀唐詩三百首,不會作詩也會吟”,說明了大量閱讀詩歌名篇對學習作詩有非常大的幫助。做開發也一樣,Android原始碼是全世界最優秀的Android工程師編寫的程式碼,也是Android開發中絕對的權威所在。Android系統開源,且佔據了當今手機系統世界的絕大部分江山,各大手機廠商要做手機系 【Qt】通過QtCreator原始碼學習Qt(一):pro檔案1、學習目的 學習pro檔案的語法規則,這在跨平臺專案中會經常用到。和條件編譯相似,在pro中可以根據平臺選擇不同的編譯模組、檔案,還可以向原始碼中傳遞變數等。 2、學習方法 通過學習QtCreator原始碼中的pro檔案,來掌握pro檔案語法規則,下面以qtcreator. 【3月6日】原始碼閱讀日記(1):HashMap前言 首先,致敬下幾位authors @author Doug Lea @author Josh Bloch @author Arthur van Hoff @author Neal Gafter HashMap是Java程式設計師使用頻率最高 【Tomcat】Tomcat原始碼解讀系列(一)——server.xml檔案的配置Tomcat是JEE開發人員最常用到的開發工具,在Java Web應用的除錯開發和實際部署中,我們都可以看到Tomcat的影子。大多數時候,我們可以將Tomcat當做一個黑盒來看待,只需要將編寫的Java Web工程進行部署即可,但是,在遇到一些比較複雜難解決的問題時 【SSH進階之路】Struts + Spring + Hibernate 進階開端(一)height 一段 ioc 效率 陽光大道 面向對象的思想 text ase 們的 Long Long ago。就聽說過SSH。起初還以為是一個東東,詳細內容更是不詳,總認為高端大氣上檔次,經過學習之後才發現,不不過高大上,更是低調奢華有內涵,經過一段時間的 【MM配置】SAP MM模塊配置目錄(轉)作者 倉儲 5.1 價格 中心 部分 輸出 會計 soft 目錄1 配置總體框架11.1 系統環境11.2 機構設置11.3 工廠結構概圖:11.4 產品組成結構圖31.5 BOM簡要清單41.6 主要業務藍圖42 一般設置部分(全局)52.1 定義國家SPRO (後補)5 (轉載)【項目管理和構建】——Maven下載、安裝和配置(一)文檔 port 目標 軟件項目管理 strong mar temp mave work 原文鏈接: http://blog.csdn.net/jiuqiyuliang/article/details/41076215 在現實 【設計模式】module模式&&Revealing module (揭示)模式但是 出版 參數傳遞 9.png 自然 指向 們的 private 初級 寫在前面 《head first設計模式》裏有一篇文章,是說使用模式的心智, 1、初學者"心智" :"我要為HELLO WORLD找個模式" 2、中級人員模式: "或許這裏我需要一個單件 【洛谷】P2983 [USACO10FEB]購買巧克力Chocolate Buying(貪心)輸出格式 準備 anti radius rod money pri price -s 題目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Choco 【gulp】前端自動化工具---gulp的使用(一)------【凡塵】app 一起 dex 前端自動化 指定 sass css 文件的 等待 什麽是gulp? 基於node的自動化構建工具 擴展:開發的時候分為2個節點一個是開發階段 另一個是部署階段 開發階段:源文件不會被壓縮 |