原创 JUC—AbstractQueuedSynchronizer(AQS)五萬字源碼深度解析與應用案例

  五萬字的Java同步器框架AbstractQueuedSynchronizer(AQS)源碼的深度解析與應用。包括鎖的獲取與釋放、同步隊列、條件隊列的原理,並提供了大量的自定義鎖的實現和生產消費模型的案例! 文章目錄1 從

原创 Java的JUC包的整體結構與功能概述

在JDK1.5之前,Java中擁有的與線程和同步相關的組件有: 描述線程的類Thread,代表線程任務的接口Runable;內置條件隊列操作接口Object.wait()/notify()/notifyAll(),它們都位於ja

原创 ThreadLocal源碼深度解析與應用案例

  本文詳細介紹了Java中的ThreadLocal的作用、原理、源碼以及應用,並且介紹了ThreadLocal的內存泄漏的原理以及解決辦法。 文章目錄1 ThreadLocal的概述1.1 ThreadLocal的入門1.2

原创 ThreadLocal的增強版—InheritableThreadLocal源碼解析

  InheritableThreadLocal相比於ThreadLocal,支持子線程繼承父線程的數據,一起來看看它的實現原理吧! 文章目錄1 從ThreadLocal說起2 InheritableThreadLocal的原

原创 數據結構—線性表(LinearList)的原理以及Java實現案例

線性表:零個或多個數據元素的有限序列。包括數組、鏈表、棧空間、隊列等結構都屬於線性表。 本文將介紹Java線性表中的數組、鏈表的實現邏輯,並附有數組線性表、單鏈表、靜態鏈表的Java實現源碼。   最基本的線性表描述爲:線性表

原创 Java集合—HashMap的源碼深度解析與應用

  超過萬字的JDK1.8的HashMap主要方法源碼解析,深入至底層紅黑樹的源碼,並且與JDK1.7的HashMap做了比較全面的對比,最後給出了比較完整的HashMap的數據結構圖!   本文主要是對JDK1.8的Hash

原创 數據結構—隊列(Queue)的原理以及Java實現案例

隊列(queue)是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性表。本文詳細介紹了隊列的特性,並且使用Java語言分別實現了基於順序結構和鏈式結構的隊列。 1 隊列的概述   隊列(queue)是隻允許在一端進行插入

原创 數據結構—多路查找樹中的2-3樹、2-3-4樹、B樹、B+樹的原理詳解

本文詳細介紹了多路查找樹中的2-3樹、2-3-4樹、B樹、B+樹的概念的區別,以及它們的應用場景。 1 多路查找樹的概述 1.1 索引概述   一般來說,我們操作的數據都是存儲在內存(CPU)中的,但如若我們要操作的數據集非常

原创 數據結構—二叉樹的4種遍歷方式詳解以及Java代碼的完整演示

  二叉樹的遍歷(traversing binary tree)是指從根節點出發,按照某種次序依次訪問二叉樹中所有結點,使得每個結點被訪問一次且僅被訪問一次。   本文介紹了4種二叉樹的遍歷方法,分別是前序、中序、後續、層序遍歷

原创 數據結構—棧(Stack)的原理以及Java實現案例

棧是限定僅在表尾進行插入和刪除操作的線性表。本文將詳細介紹棧的特性,以及它的實現案例,並且介紹棧的應用、比如方法遞歸、四則表達式運算。 1 棧的概述   棧也是一種數據呈線性排列的數據結構,不過在這種結構中,我們只能訪問最新添

原创 數據結構—線索二叉樹的原理以及Java實現案例

本文介紹了線索二叉樹的概念,以及線索二叉樹的Java的實現。如果所用的二叉樹需經常遍歷或查找結點時需要某種遍歷序列中的前驅和後繼,那麼採用線索二叉鏈表的存儲結構就是非常不錯的選擇。 1 線索二叉樹的概述   如果對二叉樹的概念

原创 Java集合—ArrayList的源碼深度解析以及應用介紹

   本文對Java中的ArrayList集合的源碼進行了深度解析,包括各種方法、擴容機制、迭代器機制、快速失敗/安全失敗機制的底層實現,並且給出了ArrayList的基本應用。 1 ArrayList的概述 public

原创 數據結構—圖(Graph)的入門概念、存儲結構、遍歷方式以及Java代碼的實現

  本文首先介紹了圖的入門概念,然後介紹了圖的鄰接矩陣和鄰接表兩種存儲結構、以及深度優先遍歷和廣度優先遍歷的兩種遍歷方式,最後提供了Java代碼的實現。   圖,算作一種比較複雜的數據結構,因此建議有一定數據結構基礎的人再來學習

原创 數據結構—散列表(哈希表)的原理以及Java代碼的實現

  數組的特點是尋址容易,插入和刪除困難;而鏈表的特點是尋址困難,插入和刪除容易。而對於tree結構,它們的查找都是先從根節點進行查找,從節點取出數據或索引與查找值進行比較,雖然查找和增刪的綜合效率較好,但是最終還是需要進行多次

原创 數據結構—樹(Tree)的入門原理以及Java實現案例

樹結構和線性結構的最大的不同是,樹中的節點具有明顯的層級關係,並且一個節點可以對應多個節點。本文將詳細及介紹樹這種數據結構的基本概念,以及通用的樹的Java實現方式,爲後面各種樹的深入學習打好基礎。 1 樹的概述 1.1 定義