原创 集合系列 Map:TreeMap
TreeMap 是 Map 集合的有序實現,其底層是基於紅黑樹的實現,能夠早 log(n) 時間內完成 get、put 和 remove 操作。 public class TreeMap<K,V> extends Abst
原创 集合系列 Set:HashSet
HashSet 是 Set 集合的哈希實現,其繼承了 AbstractSet 抽象類,並實現了 Set 接口。 public class HashSet<E> extends AbstractSet<E> impl
原创 集合系列 Queue:PriorityQueue
PriorityQueue 是一個優先級隊列,其底層原理採用二叉堆實現。我們先來看看它的類聲明: public class PriorityQueue<E> extends AbstractQueue<E> impleme
原创 集合系列 List:Stack
Stack 是先進後出的棧結構,其並不直接實現具體的邏輯,而是通過繼承 Vector 類,調用 Vector 類的方法實現。 public class Stack<E> extends Vector<E> 核心方法 Stack
原创 集合系列 List:ArrayList
ArrayList 是 List 集合的列表經典實現,其底層採用定長數組實現,可以根據集合大小進行自動擴容。 public class ArrayList<E> extends AbstractList<E> im
原创 集合系列 Set:TreeSet
TreeSet是一個有序的集合,它的作用是提供有序的Set集合。TreeSet是一個有序的集合,它的作用是提供有序的Set集合。它繼承了AbstractSet抽象類,實現了NavigableSet,Cloneable,Serial
原创 集合系列 Map:LinkedHashMap
我們之前說過 LinkedHashMap 是在 HashMap 的基礎上,增加了對插入元素的鏈表維護。那麼其到底是怎麼實現的呢?今天這篇文章就帶我們來一探究竟。 public class LinkedHashMap<K,V>
原创 集合系列 List:LinkedList
LinkedList 是鏈表的經典實現,其底層採用鏈表節點的方式實現。 public class LinkedList<E> extends AbstractSequentialList<E> implements
原创 集合系列 List:Vector
Vector 的底層實現以及結構與 ArrayList 完全相同,只是在某一些細節上會有所不同。這些細節主要有: 線程安全 擴容大小 線程安全 我們知道 ArrayList 是線程不安全的,只能在單線程環境下使用。而 Vect
原创 集合系列 Set:LinkedHashSet
LinkedHashSet 繼承了 HashSet,在此基礎上維護了元素的插入順序。 public class LinkedHashSet<E> extends HashSet<E> implements Set<
原创 爲什麼要學集合源碼?
1.學習集合源碼,能夠讓我們使用得更加準確。 當我們深入學習了源碼之後,我們就能夠了解其特性,從而能夠根據我們的使用場景去做出更好的選擇,從而讓我們的代碼運行效率更高。 我們舉一個最簡單的例子 —— ArrayList 和 Lin
原创 從源代碼到機器碼,發生了什麼?
如下圖所示,編譯器可以分爲:前端編譯器、JIT 編譯器和AOT編譯器。下面我們逐個講解。 前端編譯器:源代碼到字節碼 之前我們說到:對於 Java 虛擬機來說,其實際輸入的是字節碼文件,而不是 Java 文件。那麼對於 Java
原创 JVM參數之追蹤類信息
我們都知道 JVM 在啓動的時候會去加載類信息,那麼我們怎麼得知他加載了哪些類,又卸載了哪些類呢? 使用下面的程序作爲本次的演示程序。 public class ClassLoadDemo { public static
原创 爲什麼要學虛擬機?
爲什麼要學虛擬機? 跟許多人一樣,我一開始接觸 Java 虛擬機只是因爲面試需要用到,所以硬着頭皮看看。所以很多人對於爲什麼要學虛擬機這個問題,他們的答案都是:因爲面試。但我經過了幾年的學習和實戰,我發現其實學習虛擬機並不僅僅
原创 Java 虛擬機的歷史
說起 Java 虛擬機,許多人就會將其與 HotSpot 虛擬機等同看待。但實際上 Java 虛擬機除了 HotSpot 之外,還有 Sun Classic VM、Exact VM、BEA JRocketit、IBM J9 等等