搜尋
首頁JavaJava入門java常用資料結構有哪些

java常用資料結構有哪些

Apr 14, 2021 pm 04:52 PM
java資料結構

java資料結構有:1、陣列;2、鍊錶,一種遞歸的資料結構;3、棧,依照「後進先出」、「先進後出」的原則來儲存資料;4、隊列;5、樹,是由n(n>0)個有限節點組成的一個具有層次關係的集合;6、堆;7、圖;8、哈希表。

java常用資料結構有哪些

本教學操作環境:windows7系統、java8版、DELL G3電腦。

Java常見資料結構

#這 8 種資料結構有什麼差別呢?

①、陣列

優點:

  • 依照索引查詢元素的速度很快;

  • 依照索引遍歷陣列也很方便。

缺點:

  • 陣列的大小在建立後就確定了,無法擴容;

  • 陣列只能儲存一種類型的資料;

新增、刪除元素的操作很耗時間,因為要移動其他元素。

②、鍊錶

  • #《演算法(第4 版)》一書中是這樣定義鍊錶的:

    鍊錶是一種遞歸的資料結構,它或是為空(null),或是指向一個結點(node)的引用,該節點還有一個元素和一個指向另一個鍊錶的引用。

    Java 的LinkedList 類別可以很形像地透過程式碼的形式來表示一個鍊錶的結構:

public class LinkedList<E> {
    transient Node<E> first;
    transient Node<E> last;

    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }
}
  • 這是一種雙向鍊錶,目前元素item 既有prev 又有next,不過first 的prev 為null,last 的next 為null。如果是單向鍊錶的話,就只有 next,沒有 prev。

由於不必按照順序的方式存儲,鍊錶在插入、刪除的時候可以達到O(1) 的時間複雜度(只需要重新指向引用即可,不需要像陣列那樣移動其他元素)。除此之外,鍊錶也克服了陣列必須預先知道資料大小的缺點,從而可以實現靈活的記憶體動態管理。

優點:

  • 不需要初始化容量;

  • 可以加入任意元素;

  • 插入和刪除的時候只需要更新引用。

缺點:

  • 含有大量的引用,佔用的記憶體空間大;

  • 查找元素需要遍歷整個鍊錶,耗時。

③、堆疊

#堆疊就好像水桶一樣,底部是密封的,頂部是開口,水可以進可以出。用過水桶的小夥伴應該要明白這樣一個道理:先進去的水在桶的底部,後進去的水在桶的頂部;後進去的水先被倒出來,先進去的水後被倒出來。

同理,堆疊依照「後進先出」、「先進後出」的原則來儲存數據,先插入的數據被壓入棧底,後插入的數據在棧頂,讀出數據的時候,從棧頂開始依序讀出。

④、佇列

#佇列就好像一段水管一樣,兩端都是開口的,水從一端進去,然後從另外一端出來。先進去的水先出來,然後進去的水再出來。

和水管有些不同的是,隊列會對兩端進行定義,一端叫隊頭,另外一端就叫隊尾。隊頭只允許刪除操作(出隊),隊尾只允許插入操作(入隊)。

⑤、樹

#樹是典型的非線性結構,它是由n (n>0)個有限節點組成的一個具有層次關係的集合。

之所以叫“樹”,是因為這種資料結構看起來就像是一個倒掛的樹,只不過根在上,葉在下。樹狀資料結構有以下這些特點:

  • 每個節點都只有有限個子節點或無子節點;

  • ##沒有父節點的節點稱為根節點;

  • 每一個非根節點有且只有一個父節點;

  • 除了根節點外,每個子節點可分為多個不相交的子樹。

下圖展示了樹的一些術語:

 

 

 

基於二元查找樹的特點,它相比較於其他資料結構的優勢就在於尋找、插入的時間複雜度較低,為O(logn)。假如我們要從上圖找5 個元素,先從根節點7 開始找,5 必定在7 的左側,找到4,那5 必定在4 的右側,找到6,那5 必定在6 的左側,找到了。

理想情況下,透過 BST 找出節點,所需檢查的節點數可以減半。

平衡二元樹:當且僅當任何節點的兩棵子樹的高度差不大於 1 的二元樹。由前蘇聯的數學家 Adelse-Velskil 和 Landis 在 1962 年提出的高度平衡的二元樹,根據科學家的英文名字也稱為 AVL 樹。

平衡二元樹本質上也是一顆二元查找樹,不過為了限制左右子樹的高度差,避免出現傾斜樹等偏向於線性結構演化的情況,所以對二叉搜尋樹中每個節點的左右子樹作了限制,左右子樹的高度差稱為平衡因子,樹中每個節點的平衡因子絕對值不大於1。

平衡二元樹的困難在於,當刪除或增加節點的情況下,如何透過左旋或右旋的方式來保持左右平衡。

Java 中最常見的平衡二元樹是紅黑樹,節點是紅色或黑色,透過顏色的限制來維持著二元樹的平衡:

1)每個節點都只能是紅色或黑色

2)根節點是黑色

3)每個葉節點(NIL 節點,空節點)是黑色的。

4)如果一個節點是紅色的,則它兩個子節點都是黑色的。也就是說一條路徑上不能出現相鄰的兩個紅色節點。

5)從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

 

⑥、堆

#堆可以被看做是一棵樹的陣列對象,具有以下特點:

  • 堆中某個節點的值總是不大於或不小於其父節點的值;

  • ##堆總是一棵完全二元樹。

將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。

 

 

在線性結構中,資料元素之間滿足唯一的線性關係,每個資料元素(除第一個和最後一個外)均有唯一的「前驅」與「後繼」;

在樹狀結構中,資料元素之間有著明顯的層次關係,且每個資料元素只與上一層中的一個元素(父節點)及下一層的多個元素(子節點)相關;

而在圖形結構中,節點之間的關係是任意的,圖中任兩個資料元素之間都有可能相關。

⑧、哈希表

哈希表(Hash Table),也叫散列表,是一種可以透過關鍵碼值(key-value)直接存取的資料結構,它最大的特點就是可以快速實現查找、插入和刪除。

陣列的最大特點是尋找容易,插入和刪除困難;而鍊錶正好相反,尋找困難,而插入和刪除容易。哈希表很完美地結合了兩者的優點, Java 的 HashMap 在此基礎上也加入了樹的優點。

 

#雜湊函數在雜湊表中起⾮常關鍵的作⽤,它可以把任意長度的輸入轉換成固定長度的輸出,該輸出就是哈希值。雜湊函數使得一個資料序列的存取過程變得更加迅速有效,透過雜湊函數,資料元素能夠被很快的進行定位。

若關鍵字為 k,則其值存放在 

hash(k) 的儲存位置。由此,不需要遍歷就可以直接取得 k 對應的值。

對於任意兩個不同的資料區塊,其雜湊值相同的可能性極小,也就是說,對於一個給定的資料區塊,找到和它雜湊值相同的資料區塊極為困難。再者,對於一個資料區塊,即使只改動它的一個位元,其雜湊值的改變也會非常的大——這正是 Hash 存在的價值!

儘管可能性極小,但仍然會發生,如果雜湊衝突了,Java 的HashMap 會在陣列的同一個位置上增加鍊錶,如果鍊錶的長度大於8,將會轉換成紅黑樹進行處理-這就是所謂的拉鍊法(陣列鍊錶)。

更多程式相關知識,請造訪:程式設計影片! !

以上是java常用資料結構有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器