原创 從底層數據結構和CPU緩存兩方面剖析LinkedList的查詢效率爲什麼比ArrayList低

雖然前面有寫到LinkedList與ArrayList的增刪改查效率的全面比較,但回想一下還是有必要對這兩者的查詢效率做一個單獨的比較,也能進一步加深理解。這次分底層數據結構和CPU緩存兩方面展開它們分別對查詢效率的闡述。 一、底

原创 分享開始讀源碼的感受,望共勉

這段時間,一直在鑽HashMap的源碼,越讀到後面,心裏越覺得有什麼想要說的,下面通過HashMap的擴容方法引出我想分享的一些思考和感受。 HashMap的resize擴容方法,最迷人之處在於其巧妙的運用了核心算法:e.hash

原创 HashMap擴容時的rehash方法中(e.hash & oldCap) == 0算法推導

HashMap在擴容時,需要先創建一個新數組,然後再將舊數組中的數據轉移到新數組上來 此時,舊數組上的數據就會根據(e.hash & oldCap) 是否等於0這個算法,被很巧妙地分爲2類: ① 等於0時,則將該頭節點放到新數組時

原创 HashMap在put數據時是如何找到要存放的位置的?

初印象:初識HashMap時,知道HashMap是用來存放Key-Value這樣的鍵值對的,也知道HashMap的底層數據結構是:數組+鏈表+紅黑樹,且數組長度爲2的x次冪。 疑問:那麼往HashMap中添加鍵值對時,是什麼決定了

原创 對Java總體認知(摘抄自《深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)》)

Java概述: Java不僅僅是一門編程語言,它還是一個由一系列計算機軟件和規範組成的技術體系,該技術體系提供了完整的軟件開發和跨平臺部署的支持環境,並廣泛應用於嵌入式系統、移動終端、企業服務器、大型機等多種場合。時至今日,Jav

原创 HashMap的put方法源碼解析及其中兩種會觸發擴容的場景(足夠詳盡,有問題歡迎指正~)

分析HashMap的put方法的源碼後發現,HashMap的擴容方法在兩個場景下會被調用: 初始化HashMap的鏈表數組時,會被調用,用來初始化鏈表數組的初始容量爲16,以及初始化鏈表數組的閾值爲初始容量16*負載因子0.75

原创 Java冒泡排序及其時間複雜度計算

@author Dylaniou 2020-05-28 21:21 冒泡排序算法: 第一輪冒泡排序: 第一次拿數組的第1位和第2位進行比較,若第1位大於第2位,則將兩者的值交換, 再繼續拿交換後的第1位與第3位進行比較,

原创 HashMap的resize()即擴容方法源碼解讀(如有不足之處,歡迎指正~)

分析HashMap的resize()即擴容方法的源碼,會發現主要分兩部分操作: 爲創建新數組初始化新數組容量和新數組擴容閾值; 創建新數組後,需將舊數組數據轉移到新數組上來 具體,詳見下述的源碼解析: /**HashMap的r

原创 DOS001 用批處理批量替換文件中的某個字符串(本地單元測試通過,部分功能有待優化,歡迎指正)

腳本用途說明: 把同一目錄下的多個文件中的字符串123替換成字符串abc; 操作步驟: 1.將以下批處理腳本copy到本地任意目錄,新建一個批量替換.bat文件(隨各人喜好定義,文件名不固定); 2.因腳本中目錄已經寫成c:\te

原创 原碼、反碼、補碼以及爲什麼要用反碼和補碼

轉載自: cumtchw When you learn a knowledge, you must reach the level that you can use it profiently, not just know it

原创 HashMap底層數據結構及其增add刪remove查get方法的代碼實現原理

1.HashMap底層數據結構是數組+鏈表(jdk1.7頭插法<擴容時鏈表逆序可能會導致環形鏈表的問題出現> jdk1.8尾插法)+紅黑樹(jdk1.8). 2.HashMap中數組的容量默認爲16,負載因子默認爲0.75,當數組

原创 HashMap之tableSizeFor(int cap)方法原理詳解(分2的n次冪和非2的n次冪兩種情況討論)

方法說明:HashMap的tableSizeFor(int cap)方法,可以返回一個大於或等於給定cap值的且最靠近cap值的2的n次冪的數值.此方法可以保證HashMap的數組容量一定是2的n次冪.採用的具體算法原理詳細如下:

原创 LinkedList和ArrayList底層數據結構及方法源碼說明

一、LinkedList(同時實現了List< E >接口和Deque< E > implements Queue< E >接口) 1.LinkedList底層數據結構是一個雙向鏈表(每個節點除了本身元素外,還包含了要指向的前一個

原创 紅黑樹實現自平衡的原理圖解及與二叉查找樹的比較

1.紅黑樹五大原則: (1)節點爲紅色或黑色 (2)根節點爲黑色 (3)紅色節點的子節點和父節點不能爲紅色 (4)從根節點到所有葉子節點的路徑中黑色節點個數相同 (5)葉子節點爲黑色 2.在紅黑樹增刪數據時,先增刪,增刪後若不滿足

原创 2的n次冪與二進制位全爲1之間的聯繫

現象: 2 ^ 3 = 8 = (1+2+4) +1 =(2 ^ 0+2 ^ 1+2 ^ 2)+1 即2 ^ 3 - 1=(2 ^ 0+2 ^ 1+2 ^ 2) 2 ^ 4 = 16 = (1+2+4+8) +1 =(2 ^ 0+