陣列列表(array list)和連結串列(linked list)的區別

陣列列表和連結串列是資料儲存和檢索的常用術語。雖然儲存裝置很多,但歸根結底還是依賴於儲存機制。這兩種儲存機制將資料放在儲存裝置中,併在需要時檢索它們。讓我們看看它們是如何在記憶體中儲存資料的。陣列列表使用順序儲存,資料片段一個接一個地儲存。這也許是一種更簡單的儲存形式——它避免了混淆。是的,我們可以從陣列列表的下一個記憶體位置檢索下一個專案或資料;但是,它是透過連結串列中的指標來儲存的。在這裡,我們需要兩個存...

陣列列表(array list)和連結串列(linked list)的區別

如何儲存資料?

陣列列表和連結串列是資料儲存和檢索的常用術語。雖然儲存裝置很多,但歸根結底還是依賴於儲存機制。這兩種儲存機制將資料放在儲存裝置中,併在需要時檢索它們。讓我們看看它們是如何在記憶體中儲存資料的。陣列列表使用順序儲存,資料片段一個接一個地儲存。這也許是一種更簡單的儲存形式——它避免了混淆。是的,我們可以從陣列列表的下一個記憶體位置檢索下一個專案或資料;但是,它是透過連結串列中的指標來儲存的。在這裡,我們需要兩個儲存位置—一個用於資料,另一個用於指標。指標定址下一個資料的記憶體位置。我們很容易理解連結串列從不按順序儲存資料;相反,它使用隨機儲存機制。指標是在記憶體中定位資料位置的關鍵元素。

動態陣列和連結串列

我們已經討論了這兩種儲存機制是如何放入資料的,我們可以為陣列列表的內部儲存方案提供一個術語“動態陣列”。它只是一個接一個地放置資料塊(因此得名),而連結串列在指標的幫助下使用一個內部列表來跟蹤下一項。因此,它使用一個內部連結串列,比如單連結串列或雙連結串列來顯示下一個資料。

記憶體使用

由於陣列列表只儲存實際的資料,所以我們只需要儲存資料的空間。相反,在連結串列中,我們也使用指標。因此,需要兩個記憶體位置,可以說連結串列比陣列表消耗更多的記憶體。連結串列的一個優點是它從不需要連續的記憶體位置來儲存資料,而不是陣列列表。指標能夠保持下一個資料位置的位置,我們甚至可以使用不連續的較小記憶體插槽。當談到記憶體使用時,指標在連結串列中起主要作用,它們的有效性也是如此。

初始陣列列表和連結串列的大小

對於陣列列表,即使是空列表也需要10的大小,但是對於連結串列,我們不需要這麼大的空間。我們可以建立一個大小為0的空連結串列。以後,我們可以根據需要增加大小。

資料檢索

陣列列表中的資料檢索比較簡單,因為它按順序儲存。它所做的只是識別第一個資料位置;從那裡,依次訪問下一個位置以檢索其餘位置。它的計算方式類似於第一個資料位置+“n”,其中“n”是陣列列表中資料的順序。連結串列引用初始指標來查詢第一個資料位置,然後引用與每個資料關聯的指標來查詢下一個資料位置。檢索過程主要依賴於這裡的指標,它們有效地向我們顯示下一個資料位置。

資料結束

陣列列表使用空值來標記資料的結束,而連結串列使用空指標來標記資料的結束。一旦系統識別出空資料,陣列列表就會停止下一次資料檢索。以類似的方式,空指標阻止系統繼續進行下一次資料檢索。

反向遍歷

連結串列允許我們在descendingiterator()的幫助下反向遍歷。但是,我們在陣列列表中沒有這樣的功能—這裡的反向遍歷成了一個問題。

語法

讓我們看看這兩種儲存機制的Java語法。

陣列列表建立:

List arraylistsample=new ArrayList();

將物件新增到陣列列表:

Arraylistsample.add(“name1”);

Arraylistsample.add(“name2”);

這就是結果陣列列表的樣子–[name1,name2]。

連結串列建立:

列表<字串>linkedlistsample=新建linkedList<字串>();

將物件新增到連結串列:

Linkedlistsample.add(“name3”);

Linkedlistsample.add(“name4”);

這就是結果連結串列的樣子–[name3,name4]。

對於get或search操作,哪個更好?

陣列列表需要O(1)個時間來執行任何資料搜尋,而連結串列需要u O(n)個時間來執行第n個資料搜尋。因此,陣列列表總是使用固定的時間進行任何資料搜尋,但在連結串列中,所用的時間取決於資料的位置。因此,對於Get或Search操作,陣列列表總是一個更好的選擇。

**操作和加法操作哪個更好?

陣列列表和連結串列都需要O(1)個時間來新增資料。但是如果陣列已滿,那麼陣列列表需要花費相當長的時間來調整其大小並將專案複製到較新的列表中。在這種情況下,連結串列是更好的選擇。

哪一個對移除操作更好?

刪除操作在陣列列表和連結串列中花費的時間幾乎相同。在陣列列表中,此操作刪除資料,然後移動資料的位置以形成新的陣列—這需要O(n)個時間。在連結串列中,此操作遍歷特定資料並更改指標位置以形成較新的列表。遍歷和刪除的時間在這裡也是O(n)。

哪個更快?

我們知道陣列列表使用內部陣列來儲存實際資料。因此,如果刪除了任何資料,那麼所有即將出現的資料都需要記憶體移位。顯然,這需要相當長的時間,而且會減慢速度。在連結串列中不需要這樣的記憶體移位,因為它所做的只是改變指標的位置。因此,在任何型別的資料儲存中,連結串列都比陣列錶快。但是,這完全取決於操作的型別,即對於Get或Search操作,連結串列比陣列列表花費更多的時間。當我們觀察整體效能時,我們可以說鏈錶速度更快。

何時使用陣列列表和連結串列?

陣列列表最適合於連續記憶體可用的較小資料需求。但是,當我們處理大量資料時,連續記憶體的可用性實現了資料儲存機制,無論是小資料還是大資料。接下來,決定要選擇哪一個–陣列列表還是連結串列。當您只需要儲存和檢索資料時,可以繼續使用陣列列表。但是一個列表可以透過操縱資料幫助你超越這些。一旦您決定了資料操作的頻率,檢查您通常執行的資料檢索型別就很重要了。當只是獲取或搜尋時,陣列列表是更好的選擇;對於其他操作,如**或刪除,請繼續使用連結串列。

讓我們看看錶格形式的區別。

序號 概念 差異
陣列列表 連結串列
1 資料儲存方式 使用順序資料儲存 使用非順序資料儲存
2 內部儲存方案 維護內部動態陣列 維護一個連結串列
記憶體使用 僅為資料需要記憶體空間 資料和指標都需要記憶體空間
4 初始列表的大小 至少需要10件物品的空間 不需要空間,我們甚至可以建立一個大小為0的空連結串列。
5 資料檢索 計算方式與第一個資料位置+“n”類似,其中“n”是陣列列表中資料的順序 從第一個或最後一個遍歷,直到需要所需的資料
6 資料結束 空值表示結束 空指標表示結束
7 反向遍歷 不允許 允許在descendingiterator()的幫助下
8 列表建立語法 List arraylistsample=new ArrayList();  List linkedlistsample=new linkedList(); 
9 新增物件 Arraylistsample.add(“name1”);  Linkedlistsample.add(“name3”); 
10 獲取或搜尋 耗時0(1),效能更好 需要O(n)時間,效能取決於資料的位置
11 **或新增 消耗O(1)時間,除非陣列已滿 在任何情況下消耗O(1)時間
12 刪除或刪除 花費時間 花費時間
13 何時使用? 當涉及到大量獲取或搜尋操作時;即使在開始時,記憶體可用性也應該更高 當存在大量**或刪除操作時,記憶體可用性不需要是連續的
  • 發表於 2021-06-25 00:29
  • 閱讀 ( 26 )
  • 分類:科技

你可能感興趣的文章

遺傳圖譜(genetic map)和聯動圖(linkage map)的區別

遺傳圖譜和連鎖圖譜的關鍵區別在於作圖過程中使用的基因型別。遺傳圖譜由特定染色體上的所有基因組成,而連鎖圖譜則由特定染色體上的連鎖基因組成。 遺傳圖和連鎖圖是兩種顯示染色體上基因的染色體圖。遺傳圖顯示...

  • 發佈於 2020-10-16 03:35
  • 閲讀 ( 62 )

for迴圈(for loop)和foreach迴圈(foreach loop)的區別

...控制結構,而foreach迴圈是一種增強的for迴圈,只適用於陣列和集合。 目錄 1. 概述和主要區別 2. 什麼是迴圈 3. 什麼是foreach迴圈 4. for迴圈與foreach迴圈的相似性 5. 並排比較-表格形式的for迴圈與foreach迴圈 6. 摘要 什麼是for迴圈(for ...

  • 發佈於 2020-10-19 07:26
  • 閲讀 ( 83 )

選中的(checked)和java中的未檢查異常(unchecked exception in java)的區別

...考下面的程式碼。 int array1[]={1,2,3,4,5}; System.out.println(陣列1[5]); 這將導致異常。array1是一個包含5個元素的陣列。陣列的起始索引為零。列印第5個索引值會導致異常,因為它超出了界限。array1的最大索引為4。 圖03:ArrayoutBound...

  • 發佈於 2020-10-19 08:38
  • 閲讀 ( 63 )

列表(list)和設定(set)的區別

關鍵區別-列表與集合 大多數程式語言使用陣列來儲存一組相同型別的資料。陣列的一個主要缺點是,一旦聲明瞭陣列大小,就不能修改它。如果程式設計師想儲存一個超過陣列大小的值,那麼他應該建立一個新陣列,並將現...

  • 發佈於 2020-10-19 09:09
  • 閲讀 ( 50 )

陣列表(arraylist)和雙鏈表(linkedlist)的區別

...別–arraylist與linkedlist 集合對於儲存資料很有用。在普通陣列中,陣列大小是固定的。有時需要建立可以根據需要增長的陣列。Java等程式語言有集合。它是一個包含一組類和介面的框架。它充當一組元素的容器。集合允許儲存、...

  • 發佈於 2020-10-19 11:43
  • 閲讀 ( 49 )

json格式(json)和xml(xml)的區別

...料變得複雜時,可能很難讀取XML。 下面是一個使用JSON的陣列示例。 {“學生”:[ {“id”:“S001”,“name”:“Ann”}, {“id”:“S002”,name:“Peter”} ] } 使用XML格式的示例。 <students> <student> S001安 S002彼得 </student&...

  • 發佈於 2020-10-20 01:35
  • 閲讀 ( 48 )

列表(list)和元組(tuple)的區別

... 6. 摘要 什麼是列表(list)? 在諸如C或C++的程式語言中,陣列被用來儲存相同資料型別的元素。但在Python列表中,所有元素不必同時存在。列表中的每一項都用逗號隔開。所有元素都包含在方括號內。列表的一個例子是list1=[1,“...

  • 發佈於 2020-10-24 03:25
  • 閲讀 ( 47 )

連結(linked)和非連鎖基因(unlinked genes)的區別

連結(linked)和非連鎖基因(unlinked genes)的區別 基因是染色體**有的DNA序列。人類基因組中有46條染色體。其中22對同源染色體被稱為常染色體,一對被稱為****。每一條染色體上都有成千上萬的基因。有些基因緊密地分佈在同一條...

  • 發佈於 2020-10-25 03:28
  • 閲讀 ( 61 )

單鏈表(singly linked list)和雙鏈表(doubly linked list)的區別

...組成,每個節點都有對序列中下一個節點的引用。雙鏈接列表包含一個節點序列,其中每個節點都包含對下一個節點和上一個節點的引用。 單鏈表 單鏈連結串列中的每個元素都有兩個欄位,如圖1所示。資料欄位儲存儲存的實際...

  • 發佈於 2020-11-02 07:30
  • 閲讀 ( 36 )

線性的(linear)和非線性資料結構(nonlinear data structures)的區別

...性的。 圖01:堆疊資料結構 一些常用的線性資料結構是陣列、連結串列、堆疊和佇列。首先,陣列是相同型別的資料元素的集合。索引有助於標識陣列中的每個元素。其次,連結串列是一個節點序列,其中每個節點由一個數據...

  • 發佈於 2020-11-03 23:07
  • 閲讀 ( 68 )
miumiu水
miumiu水

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦