一文掌握關於Java數據結構全部知識點(歡迎一塊兒完善)

在咱們學習Java的時候,不少人會面臨我不知道繼續學什麼或者面試會問什麼的尷尬狀況(我本人以前就很迷茫)。因此,我決定經過這個開源平臺來幫助一些有須要的人,經過下面的內容,你會掌握系統的Java學習以及面試的相關知識。原本是想經過Gitbook的形式來製做的,後來想了想以爲可能有點大題小作。另外,我本身一我的的力量畢竟有限,但願各位有想法的朋友能夠提issue和pull。java

Java面試通關手冊(Java學習指南)github 地址:https://github.com/Snailclimb...node

若是你以爲有什麼問題能夠給我提issue,以爲不錯的話你也能夠star一下。目前更新的內容並很少,由於爲了保證文章質量,每一篇文章我本身都看了一遍,但願你們貢獻本身的力量完善。git

數據結構

推薦學習視頻:浙江大學數據結構國家精品教程github

Queue
Java集合類分析之Queue面試

Set算法

[由淺入深理解java集合(二)——集合 Set](https://www.jianshu.com/p/9081017a2d67)

List數據庫

Java 集合系列08之 List總結(LinkedList, ArrayList等使用場景和性能分析)數組

ArrayList 是一個數組隊列,至關於動態數組。它由數組實現,隨機訪問效率高,隨機插入、隨機刪除效率低。安全

**LinkedList** 是一個雙向鏈表。它也能夠被看成堆棧、隊列或雙端隊列進行操做。LinkedList隨機訪問效率低,但隨機插入、隨機刪除效率低。

**Vector** 是矢量隊列,和ArrayList同樣,它也是一個動態數組,由數組實現。可是ArrayList是非線程安全的,而Vector是線程安全的。

Stack 是棧,它繼承於Vector。它的特性是:先進後出(FILO, First In Last Out)。數據結構

[集合框架源碼學習之ArrayList](https://juejin.im/post/5aafa05a6fb9a028c06aa217)

注意ArrayList的擴容機制(注意移位運算符的使用)以及System.arraycopy()和Arrays.copyOf()方法在ArrayList集合源碼中的使用。

[集合框架源碼學習之LinkedList](https://juejin.im/post/5aafab9651882555635e219a)

[java數據結構與算法之順序表與鏈表深刻分析](https://blog.csdn.net/javazejian/article/details/52953190)

Map

集合框架源碼學習之HashMap(JDK1.8)

ConcurrentHashMap實現原理及源碼分析

Stack(棧)
java數據結構與算法之棧(Stack)設計與實現

1 二叉樹

二叉樹(百度百科)

(1)徹底二叉樹——若設二叉樹的高度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,而且葉子結點都是從左到右依次排布,這就是徹底二叉樹。

(2)滿二叉樹——除了葉結點外每個結點都有左右子葉且葉子結點都處在最底層的二叉樹。

(3)平衡二叉樹——平衡二叉樹又被稱爲AVL樹(區別於AVL算法),它是一棵二叉排序樹,且具備如下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,而且左右兩個子樹都是一棵平衡二叉樹。

2 徹底二叉樹

徹底二叉樹(百度百科)

3 滿二叉樹

滿二叉樹(百度百科,國內外的定義不一樣)

國內教程定義:一個二叉樹,若是每個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,若是一個二叉樹的層數爲K,且結點總數是(2^k) -1 ,則它就是滿二叉樹。

4 二叉查找樹(BST)

淺談算法和數據結構: 七 二叉查找樹

二叉查找樹的特色:

1. 若任意節點的左子樹不空,則左子樹上全部結點的     值均小於它的根結點的值;
2. 若任意節點的右子樹不空,則右子樹上全部結點的值均大於它的根結點的值;
3. 任意節點的左、右子樹也分別爲二叉查找樹。
4. 沒有鍵值相等的節點(no duplicate nodes)。

5 平衡二叉樹(Self-balancing binary search tree)
平衡二叉樹(百度百科,平衡二叉樹的經常使用實現方法有紅黑樹、AVL、替罪羊樹、Treap、伸展樹等)

6 紅黑樹
紅黑樹特色:

1. 每一個節點不是紅色就是黑色的;
    2. 根節點老是黑色的;
    3. 全部的葉節點都是是黑色的(紅黑樹的葉子節點都是空節點(NIL或者NULL));
    4. 若是節點是紅色的,則它的子節點必須是黑色的(反之不必定);
    5. 從根節點到葉節點或空子節點的每條路徑,必須包含相同數目的黑色節點(即相同的黑色高度)
    
    [漫畫:什麼是紅黑樹?](https://juejin.im/post/5a27c6946fb9a04509096248#comment)(也介紹到了二叉查找樹)
    
    [尋找紅黑樹的操做手冊](http://dandanlove.com/2018/03/18/red-black-tree/)(文章排版以及思路真的不錯)
    
    [紅黑樹深刻剖析及Java實現](https://zhuanlan.zhihu.com/p/24367771)(美團點評技術團隊)

7 B-,B+,B*樹

[二叉樹學習筆記之B樹、B+樹、B*樹 ](https://yq.aliyun.com/articles/38345)

[《B-樹,B+樹,B*樹詳解》](https://blog.csdn.net/aqzwss/article/details/53074186)

[《B-樹,B+樹與B*樹的優缺點比較》](https://blog.csdn.net/bigtree_3721/article/details/73632405)
B-樹(或B樹)是一種平衡的多路查找(又稱排序)樹,在文件系統中有所應用。主要用做文件的索引。其中的B就表示平衡(Balance)

B+ 樹的葉子節點鏈表結構相比於 B- 樹便於掃庫,和範圍檢索。
B+樹支持range-query(區間查詢)很是方便,而B樹不支持。這是數據庫選用B+樹的最主要緣由。
B樹 是B+樹的變體,B樹分配新結點的機率比B+樹要低,空間使用率更高;

8 LSM 樹

[[HBase] LSM樹 VS B+樹](https://blog.csdn.net/dbanote...

B+樹最大的性能問題是會產生大量的隨機IO

爲了克服B+樹的弱點,HBase引入了LSM樹的概念,即Log-Structured Merge-Trees。

LSM樹由來、設計思想以及應用到HBase的索引

本文做者:snailclimb

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索