鍊錶與陣列的區別
鍊錶的特性是在中間任意位置新增刪除元素的都非常的快,不需要移動其它的元素。鍊錶顧名思義,要把各個元素鏈結起來才算。通常鍊錶每乙個元素都要儲存乙個指向下乙個元素的指標(單鏈表)。雙鏈表的化每個元素即要儲存到下乙個元素的指標,還要儲存乙個上乙個元素的指標。迴圈鍊錶則把最後乙個元素中儲存下乙個元素指標指向第乙個元素。
陣列是一組具有相同型別和名稱的變數的集合。這些變數稱為陣列的元素,每個陣列元素都有乙個編號,這個編號叫做下標,我們可以通過下標來區別這些元素。陣列元素的個數有時也稱之為陣列的長度。
陣列和鍊錶之間的區別
1)陣列在記憶體中是逐個存放的,也就是說倘若陣列的第乙個元素在位址a,則陣列第二個元素就在位址a+1。而鍊錶則不是,鍊錶每個節點沒有相對固定的位置關係。某個節點在位址a其後的節點不一定是a+1,而在記憶體的其他空閒區域,呈現一種隨機的狀態。
2)陣列一旦顯式的被申明後,其大小就固定了,不能動態進行擴充。而鍊錶則可以,可以動態生成節點並且新增到已有的鍊錶後面。
3)鍊錶靈活,但是空間和時間額外耗費較大;陣列大小固定,元素位置固定,但是操作不靈活,且容易浪費空間,但是時間耗費較小,尤其是元素變化不大的時候效率很高。雙向鍊錶比單向的更靈活,但是空間耗費也更大
更加詳細的區分:
陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊(單向的乙個,雙向鍊錶的話,會有兩個).
陣列優於鍊錶的:
1.記憶體空間占用的少,因為鍊錶節點會附加上一塊或兩塊下乙個節點的資訊.但是陣列在建立時就固定了.所以也有可能會因為建立的陣列過大或不足引起記憶體上的問題.
2.陣列內的資料可隨機訪問.但鍊錶不具備隨機訪問性.這個很容易理解.陣列在記憶體裡是連續的空間.比如如果乙個陣列位址從100到200,且每個元素占用兩個位元組,那麼100-200之間的任何乙個偶數都是陣列元素的位址.可以直接訪問.鍊錶在記憶體位址可能是分散的.所以必須通過上一節點中的資訊找能找到下乙個節點.
3.查詢速度上.這個也是因為記憶體位址的連續性的問題.不
囉嗦了.
鍊錶優於陣列的:
1.插入與刪除的操作.如果陣列的中間插入乙個元素,那麼這個元素後的所有元素的記憶體位址都要往後移動.刪除的話同理.只有對資料的最後乙個元素進行插入刪除操作時,才比較快.鍊錶只需要更改有必要更改的節點內的節點資訊就夠了.並不需要更改節點的記憶體位址.
2.記憶體位址的利用率方面.不管你記憶體裡還有多少空間,如果沒辦法一次性給出陣列所需的要空間,那就會提示記憶體不足,磁碟空間整理的原因之一在這裡.而鍊錶可以是分散的空間位址.
3.鍊錶的擴充套件性比陣列好.因為乙個陣列建立後所占用的空間大小就是固定的.如果滿了就沒法擴充套件.只能新建乙個更大空間的陣列.而鍊錶不是固定的,可以很方便的擴充套件.
Java基礎之鍊錶
鍊錶 linked list 一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到是下乙個節點的指標 pointer 鍊錶一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到是下乙個節點的指標 pointer 鍊錶與陣列...
1 基礎 陣列鍊錶框架
下面通過一張圖讓我們看清陣列和鍊錶是如何儲存集合中的資料的 1 2無須為表示表中元素之間的邏輯關係增加額外的儲存空間 可以方便地隨機訪問表中任一位置的元素。缺點是 插入和刪除運算不方便,除表尾的位置外,在表的其他位置上進行插入或刪除操作都必須移動大量元素,其效率較低 由於陣列要求占用連續的儲存空間,...
Java中陣列與鍊錶
陣列 是將元素在記憶體中連續儲存的 它的優點 因為資料是連續儲存的,記憶體位址連續,所以在查詢資料的時候效率比較高 它的缺點 在儲存之前,我們需要申請一塊連續的記憶體空間,並且在編譯的時候就必須確定好它的空間的大小。在執行的時候空間的大小是無法隨著你的需要進行增加和減少而改變的,當資料兩比較大的時候...