Java 常見的數據結構、棧、隊列、線性表(數組)、鏈表、紅黑樹、二叉樹、平衡二叉樹

Java常見的數據結構有哪些?

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

集合是基於數據結構設計的,瞭解數據結構深入瞭解集合。

隊列(queue )

  • 先進先出,後進後出。
  • 場景:各種排隊。
  • 有很多集合可以實現隊列。

棧(stack)

  • 後進先出,先進後出
  • 壓棧==入棧
  • 彈棧==出棧
  • 例如:手槍的彈夾。

線性表(數組)

  • 數組是內存中的連續存儲區域。
  • 分成若干等分的小區域(每個區域大小是-一樣的)
  • 元素存在索引
    特點:查詢元素快(根據索引快速計算出元素的地址,然後立即去定位)
    增刪元素慢(創建新數組,遷移元素)

鏈表

  • 元素不是內存中的連續區域存儲。
  • 元素是遊離存儲的。每個元素會記錄下個元素的地址。
  • 特點:查詢元素慢
  • 增刪元素快(針對於首尾元素,速度極快,Java一般是雙鏈表)

紅黑樹

二叉樹: binary tree

永遠只有一個根節點,是每個結點不超過2個節點的樹(tree)

  • 查找二叉樹,排序二叉樹:
    小的左邊,大的右邊,但是可能樹很高,性能變差。
    爲了做排序和搜索會進行左旋和右旋實現平衡查找二叉樹,讓樹的高度差不大於1。

二叉查找樹\二叉排序樹:

二又查找樹的特點:

  1. 左子樹上所有的節點的值均小於等於他的根節點的值
  2. 右子樹上所有的節點值均大於或者等於他的根節點的值
  3. 每一個子節點最多有兩個子樹
缺點:如果數的大小是的遞增的,就會形成“瘸子”現象,只有“右腿”。樹的高度就會很高。

Java底層做的是平衡二叉樹

平衡二叉樹:給予查找二叉樹

爲了避免瘸子現象,平衡二叉樹:左右子樹的高度差絕對值不大於1,並且左右兩個子樹都是一顆平衡二叉樹。

當有新的數據插入二叉樹,破壞了平衡,二叉樹就要做旋轉。左邊高,右旋;右邊高,左旋;如果不行繼續旋轉;

紅黑樹(就是基於紅黑規則實現了自平衡的排序二叉樹) :

樹儘量的保證到了很矮小,但是又排好序了,性能最高的樹。

  • 每一個節點或是紅色或是黑色
  • 根節點必須是黑色
  • 每個葉節點NIL是黑色
  • 如果某個節點是紅色,它的子節點必須是黑色
  • 對於每一個節點,從 該節點到其所有子節點的路徑上,黑節點的個數要一樣

做插入時,如果不滿足規則,則需要做旋轉或變色,來滿足規則

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章