在我們學習Java的時候,很多人會面臨我不知道繼續學什麼或者面試會問什麼的尷尬情況(我本人之前就很迷茫)。所以,我決定通過這個開源平臺來幫助一些有需要的人,通過下面的內容,你會掌握系統的Java學習以及面試的相關知識。本來是想通過Gitbook的形式來製作的,後來想了想覺得可能有點大題小做。另外,我自己一個人的力量畢竟有限,希望各位有想法的朋友可以提issue和pull。
-----------最新更新5/9/16:00----------
Java面試通關手冊(Java學習指南)github 地址:github.com/Snailclimb/…
如果你覺得有什麼問題可以給我提issue,覺得不錯的話你也可以star一下。目前更新的內容並不多,因為為了保證文章質量,每一篇文章我自己都看了一遍,希望大家貢獻自己的力量完善。
資料結構
推薦學習視訊:浙江大學資料結構國家精品教程
-
Queue
-
Set
-
List
Java 集合系列08之 List總結(LinkedList, ArrayList等使用場景和效能分析)
ArrayList 是一個陣列佇列,相當於動態陣列。它由陣列實現,隨機訪問效率高,隨機插入、隨機刪除效率低。
LinkedList 是一個雙向連結串列。它也可以被當作堆疊、佇列或雙端佇列進行操作。LinkedList隨機訪問效率低,但隨機插入、隨機刪除效率低。
Vector 是向量佇列,和ArrayList一樣,它也是一個動態陣列,由陣列實現。但是ArrayList是非執行緒安全的,而Vector是執行緒安全的。
Stack 是棧,它繼承於Vector。它的特性是:先進後出(FILO, First In Last Out)。
注意ArrayList的擴容機制(注意移位運算子的使用)以及System.arraycopy()和Arrays.copyOf()方法在ArrayList集合原始碼中的使用。
-
Map
-
Stack(棧)
-
樹
-
1 二叉樹
二叉樹(百度百科)
(1)完全二叉樹——若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,並且葉子結點都是從左到右依次排布,這就是完全二叉樹。
(2)滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
(3)平衡二叉樹——平衡二叉樹又被稱為AVL樹(區別於AVL演算法),它是一棵二叉排序樹,且具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
-
2 完全二叉樹
完全二叉樹(百度百科)
完全二叉樹:葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹
-
3 滿二叉樹
滿二叉樹(百度百科,國內外的定義不同)
國內教程定義:一個二叉樹,如果每一個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果一個二叉樹的層數為K,且結點總數是(2^k) -1 ,則它就是滿二叉樹。
-
堆
堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆;或者每個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆
-
4 二叉查詢樹(BST)
二叉查詢樹的特點:
- 若任意節點的左子樹不空,則左子樹上所有結點的 值均小於它的根結點的值;
- 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
- 任意節點的左、右子樹也分別為二叉查詢樹。
- 沒有鍵值相等的節點(no duplicate nodes)。
-
5 平衡二叉樹(Self-balancing binary search tree)
平衡二叉樹(百度百科,平衡二叉樹的常用實現方法有紅黑樹、AVL、替罪羊樹、Treap、伸展樹等)
-
6 紅黑樹
紅黑樹特點:
- 每個節點不是紅色就是黑色的;
- 根節點總是黑色的;
- 所有的葉節點都是是黑色的(紅黑樹的葉子節點都是空節點(NIL或者NULL));
- 如果節點是紅色的,則它的子節點必須是黑色的(反之不一定);
- 從根節點到葉節點或空子節點的每條路徑,必須包含相同數目的黑色節點(即相同的黑色高度)
漫畫:什麼是紅黑樹?(也介紹到了二叉查詢樹)
尋找紅黑樹的操作手冊(文章排版以及思路真的不錯)
紅黑樹深入剖析及Java實現(美團點評技術團隊)
-
7 B-,B+,B*樹
B-樹(或B樹)是一種平衡的多路查詢(又稱排序)樹,在檔案系統中有所應用。主要用作檔案的索引。其中的B就表示平衡(Balance)
- B+ 樹的葉子節點連結串列結構相比於 B- 樹便於掃庫,和範圍檢索。
- B+樹支援range-query(區間查詢)非常方便,而B樹不支援。這是資料庫選用B+樹的最主要原因。
- B樹 是B+樹的變體,B樹分配新結點的概率比B+樹要低,空間使用率更高;
-
8 LSM 樹
B+樹最大的效能問題是會產生大量的隨機IO
為了克服B+樹的弱點,HBase引入了LSM樹的概念,即Log-Structured Merge-Trees。
-