Java 中常見的數據結構


1、數據結構有什么作用?

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

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

2、常見的數據結構

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

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

    簡單的說:采用該結構的集合,對元素的存取有如下的特點:

  • 先進后出(存進去的元素,要在后它后面的元素依次取出后,才能取出該元素)。

  • 棧的入口、出口的都是棧的頂端位置。

需要注意的 2 個名詞

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

隊列

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

    簡單的說,采用該結構的集合,對元素的存取有如下的特點:

  • 先進先出(存進去的元素,要在后它前面的元素依次取出后,才能取出該元素)。

  • 隊列的入口、出口各占一側。

棧和隊列的結構圖:

數組

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

    簡單的說,采用該結構的集合,對元素的存取有如下的特點:

  • 查找元素快:通過索引,可以快速訪問指定位置的元素

  • 增刪元素慢

    指定索引位置增加元素:需要創建一個新數組,將指定新元素存儲在指定索引位置,再把原數組元素根據索引,復制到新數組對應索引的位置。

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

    數組的結構示意圖:

鏈表

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

    每個結點包括兩個部分:

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

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

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

    采用該結構的集合,對元素的存取有如下的特點:

    • 多個結點之間,通過地址進行連接。
    • 查找元素慢:想查找某個元素,需要通過連接的節點,依次向后查找指定元素。
    • 增刪元素快:
      • 增加元素:只需要修改連接下個元素的地址即可。
      • 刪除元素:只需要修改連接下個元素的地址即可。

紅黑樹

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

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

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

    結構示意圖:

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

紅黑樹的約束:
  1. 節點可以是紅色的或者黑色的

  2. 根節點是黑色的

  3. 葉子節點(特指空節點)是黑色的

  4. 每個紅色節點的子節點都是黑色的

  5. 任何一個節點到其每一個葉子節點的所有路徑上黑色節點數相同

紅黑樹的特點:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM