隊列是數據結構中比較重要的一種類型,它支持 FIFO,尾部添加、頭部刪除(先進隊列的元素先出隊列),跟咱們生活中的排隊相似。html
Java 集合中的 Queue 繼承自 Collection 接口 ,Deque, LinkedList, PriorityQueue, BlockingQueue 等類都實現了它。 Queue 用來存放 等待處理元素 的集合,這種場景通常用於緩衝、併發訪問。 除了繼承 Collection 接口的一些方法,Queue 還添加了額外的 添加、刪除、查詢操做。java
Set 繼承於 Collection 接口,是一個不容許出現重複元素,而且無序的集合,主要 HashSet 和 TreeSet 兩大實現類。node
在判斷重複元素的時候,Set 集合會調用 hashCode()和 equal()方法來實現。git
HashSet 是哈希表結構,主要利用 HashMap 的 key 來存儲元素,計算插入元素的 hashCode 來獲取元素在集合中的位置;github
TreeSet 是紅黑樹結構,每個元素都是樹中的一個節點,插入的元素都會進行排序;算法
在 List 中,用戶能夠精確控制列表中每一個元素的插入位置,另外用戶能夠經過整數索引(列表中的位置)訪問元素,並搜索列表中的元素。 與 Set 不一樣,List 一般容許重複的元素。 另外 List 是有序集合而 Set 是無序集合。數據庫
ArrayList 是一個數組隊列,至關於動態數組。它由數組實現,隨機訪問效率高,隨機插入、隨機刪除效率低。數組
LinkedList 是一個雙向鏈表。它也能夠被看成堆棧、隊列或雙端隊列進行操做。LinkedList隨機訪問效率低,但隨機插入、隨機刪除效率高。安全
Vector 是矢量隊列,和ArrayList同樣,它也是一個動態數組,由數組實現。可是ArrayList是非線程安全的,而Vector是線程安全的。數據結構
Stack 是棧,它繼承於Vector。它的特性是:先進後出(FILO, First In Last Out)。相關閱讀:java數據結構與算法之棧(Stack)設計與實現
二叉樹(百度百科)
(1)徹底二叉樹——若設二叉樹的高度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,而且葉子結點都是從左到右依次排布,這就是徹底二叉樹。
(2)滿二叉樹——除了葉結點外每個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
(3)平衡二叉樹——平衡二叉樹又被稱爲AVL樹(區別於AVL算法),它是一棵二叉排序樹,且具備如下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,而且左右兩個子樹都是一棵平衡二叉樹。
徹底二叉樹(百度百科)
徹底二叉樹:葉節點只能出如今最下層和次下層,而且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹
滿二叉樹(百度百科,國內外的定義不一樣)
國內教程定義:一個二叉樹,若是每個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,若是一個二叉樹的層數爲K,且結點總數是(2^k) -1 ,則它就是滿二叉樹。
堆是具備如下性質的徹底二叉樹:每一個結點的值都大於或等於其左右孩子結點的值,稱爲大頂堆;或者每一個結點的值都小於或等於其左右孩子結點的值,稱爲小頂堆
二叉查找樹的特色:
平衡二叉樹(百度百科,平衡二叉樹的經常使用實現方法有紅黑樹、AVL、替罪羊樹、Treap、伸展樹等)
紅黑樹的應用:
TreeMap、TreeSet以及JDK1.8以後的HashMap底層都用到了紅黑樹。
爲何要用紅黑樹
簡單來講紅黑樹就是爲了解決二叉查找樹的缺陷,由於二叉查找樹在某些狀況下會退化成一個線性結構。詳細瞭解能夠查看 漫畫:什麼是紅黑樹?(也介紹到了二叉查找樹,很是推薦)
推薦文章:
B-樹(或B樹)是一種平衡的多路查找(又稱排序)樹,在文件系統中有所應用。主要用做文件的索引。其中的B就表示平衡(Balance)
想要深刻學習的同窗們能夠加入QQ羣討論,有全套資源分享,經驗探討,沒錯,咱們等着你,分享互相的故事!