數據結構知識學習與面試 一點課堂(多岸學院)

Queue

什麼是隊列

隊列是數據結構中比較重要的一種類型,它支持 FIFO,尾部添加、頭部刪除(先進隊列的元素先出隊列),跟咱們生活中的排隊相似。html

隊列的種類

  • 單隊列(單隊列就是常見的隊列, 每次添加元素時,都是添加到隊尾,存在「假溢出」的問題也就是明明有位置卻不能添加的狀況)
  • 循環隊列(避免了「假溢出」的問題)

Java 集合框架中的隊列 Queue

Java 集合中的 Queue 繼承自 Collection 接口 ,Deque, LinkedList, PriorityQueue, BlockingQueue 等類都實現了它。 Queue 用來存放 等待處理元素 的集合,這種場景通常用於緩衝、併發訪問。 除了繼承 Collection 接口的一些方法,Queue 還添加了額外的 添加、刪除、查詢操做。java

推薦文章

Set

什麼是 Set

Set 繼承於 Collection 接口,是一個不容許出現重複元素,而且無序的集合,主要 HashSet 和 TreeSet 兩大實現類。node

在判斷重複元素的時候,Set 集合會調用 hashCode()和 equal()方法來實現。git

補充:有序集合與無序集合說明

  • 有序集合:集合裏的元素能夠根據 key 或 index 訪問 (List、Map)
  • 無序集合:集合裏的元素只能遍歷。(Set)

HashSet 和 TreeSet 底層數據結構

HashSet 是哈希表結構,主要利用 HashMap 的 key 來存儲元素,計算插入元素的 hashCode 來獲取元素在集合中的位置;github

TreeSet 是紅黑樹結構,每個元素都是樹中的一個節點,插入的元素都會進行排序;算法

推薦文章

List

什麼是List

在 List 中,用戶能夠精確控制列表中每一個元素的插入位置,另外用戶能夠經過整數索引(列表中的位置)訪問元素,並搜索列表中的元素。 與 Set 不一樣,List 一般容許重複的元素。 另外 List 是有序集合而 Set 是無序集合。數據庫

List的常見實現類

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

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

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

Stack 是棧,它繼承於Vector。它的特性是:先進後出(FILO, First In Last Out)。相關閱讀:java數據結構與算法之棧(Stack)設計與實現

ArrayList 和 LinkedList 源碼學習

推薦閱讀

Map

  • 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節點);
    4. 若是節點是紅色的,則它的子節點必須是黑色的(反之不必定);
    5. 從根節點到葉節點或空子節點的每條路徑,必須包含相同數目的黑色節點(即相同的黑色高度)
  • 7 B-,B+,B*樹

    二叉樹學習筆記之B樹、B+樹、B*樹

    《B-樹,B+樹,B*樹詳解》

    《B-樹,B+樹與B*樹的優缺點比較》

    B-樹(或B樹)是一種平衡的多路查找(又稱排序)樹,在文件系統中有所應用。主要用做文件的索引。其中的B就表示平衡(Balance)

    1. B+ 樹的葉子節點鏈表結構相比於 B- 樹便於掃庫,和範圍檢索。
    2. B+樹支持range-query(區間查詢)很是方便,而B樹不支持。這是數據庫選用B+樹的最主要緣由。
    3. B*樹 是B+樹的變體,B*樹分配新結點的機率比B+樹要低,空間使用率更高; 在這裏插入圖片描述 QQ討論羣組:984370849 706564342 歡迎加入討論

想要深刻學習的同窗們能夠加入QQ羣討論,有全套資源分享,經驗探討,沒錯,咱們等着你,分享互相的故事! 在這裏插入圖片描述

相關文章
相關標籤/搜索