原创 集合系列 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 等等