Java-中常見的數據結構

一、數據結構有什麼做用?

當使用 Java 裏面的容器類時,你有沒有想過,怎麼 ArrayList 就像一個無限擴充的數組,也好像鏈表之類的。很好使用,這就是數據結構的用處,只不過你在不知不覺中使用了。node

數據結構內容比較多,細細的講解也是相對費功夫的,不可能達到一蹴而就。我就將常見的數據結構:堆棧、隊列、數組、鏈表和紅黑樹 給你們介紹一下,做爲數據結構的入門,瞭解一下它們的特色便可。數組

二、常見的數據結構

數據存儲的經常使用結構有:棧、隊列、數組、鏈表和紅黑樹。

  • stack,又稱堆棧,它是運算受限的線性表,其限制是僅容許在標的一端進行插入和刪除操做,不容許在其餘任何位置進行添加、查找、刪除等操做。

    簡單的說:採用該結構的集合,對元素的存取有以下的特色:數據結構

  • 先進後出(存進去的元素,要在後它後面的元素依次取出後,才能取出該元素)。
  • 棧的入口、出口的都是棧的頂端位置。

須要注意的 2 個名詞spa

  • 壓棧:就是存元素。即,把元素存儲到棧的頂端位置,棧中已有元素依次向棧底方向移動一個位置。
  • 彈棧:就是取元素。即,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動一個位置。

隊列

  • 隊列queue,簡稱隊,它同堆棧同樣,也是一種運算受限的線性表,其限制是僅容許在表的一端進行插入,而在表的另外一端進行刪除。

    簡單的說,採用該結構的集合,對元素的存取有以下的特色:指針

  • 先進先出(存進去的元素,要在後它前面的元素依次取出後,才能取出該元素)。
  • 隊列的入口、出口各佔一側。
棧和隊列的結構圖:

1555753000030.png

數組

  • 數組:Array,是有序的元素序列,數組是在內存中開闢一段連續的空間,並在此空間存放元素。

    簡單的說,採用該結構的集合,對元素的存取有以下的特色:code

  • 查找元素快:經過索引,能夠快速訪問指定位置的元素
  • 增刪元素慢blog

    指定索引位置增長元素:須要建立一個新數組,將指定新元素存儲在指定索引位置,再把原數組元素根據索引,複製到新數組對應索引的位置。索引

    指定索引位置刪除元素:須要建立一個新數組,把原數組元素根據索引,複製到新數組對應索引的位置,原數組中指定索引位置元素不復制到新數組中。隊列

    數組的結構示意圖:

1555753383884.png

鏈表

  • 鏈表:linked list,由一系列結點node(鏈表中每個元素稱爲結點)組成,結點能夠在運行時i動態生成。內存

    每一個結點包括兩個部分:

    一個是存儲數據元素的數據域,

    一個是存儲下一個結點地址的指針域。

    鏈表結構有單向鏈表雙向鏈表

    採用該結構的集合,對元素的存取有以下的特色:

    • 多個結點之間,經過地址進行鏈接。
    • 查找元素慢:想查找某個元素,須要經過鏈接的節點,依次向後查找指定元素。
    • 增刪元素快:

      • 增長元素:只須要修改鏈接下個元素的地址便可。
      • 刪除元素:只須要修改鏈接下個元素的地址便可。

紅黑樹

  • 二叉樹binary tree ,是每一個結點不超過2的有序樹(tree)

    簡單的理解,就是一種相似於樹的結構,只不過每一個結點上都最多隻能有兩個子結點。

    二叉樹是每一個節點最多有兩個子樹的樹結構。頂上的叫根結點,兩邊被稱做「左子樹」和「右子樹」。

    結構示意圖:

捕獲.PNG

二叉樹的一種比較有意思的叫作紅黑樹,紅黑樹自己就是一顆二叉查找樹,將節點插入後,該樹仍然是一顆二叉查找樹。也就意味着,樹的鍵值仍然是有序的。

紅黑樹的約束:
  1. 節點能夠是紅色的或者黑色的
  2. 根節點是黑色的
  3. 葉子節點(特指空節點)是黑色的
  4. 每一個紅色節點的子節點都是黑色的
  5. 任何一個節點到其每個葉子節點的全部路徑上黑色節點數相同
紅黑樹的特色:

速度特別快,趨近平衡樹,查找葉子元素最少和最屢次數很少於二倍。

相關文章
相關標籤/搜索