1、鏈表
創建鏈表和創建數組不同,不會先划出一塊連續的內存,因為鏈表中的數據並不是連續的,鏈表在存儲數據的內存中有兩塊區域,一塊區域用來記錄下一個數據保存在哪里(指向下一個數據的指針)。當有數據進入鏈表時,會根據指針找到下一個存儲數據的位置,然后把數據保存起來,然后指向下一個存儲數據的位置。雖然鏈表是線性表,但是並不會按線性的順序存儲數據。因為鏈表這種保存數據的方式,所以插入和刪除非常容易,讀取時比較麻煩。例如:一個鏈表中0->1->2->3->4這五個內存地址中都存了數據,現在需要往2中插入一個數據,只需要更改1號和2號中記錄下一個數據的位置即可,對其他數據無影響。如果想要讀取一個數據,需要從0號開始一個一個找,直到找到那條數據為止。
優點:鏈表的插入和刪除非常方便
缺點:不太適合於隨機訪問,而在連續訪問時,鏈表也具有很好的表現
2、數組
java創建數組時,會在內存中划分出一塊連續的內存,然后當有數據進入的時候將數據按順序的存儲在這塊連續內存中。當需要讀取數組中的數據中,需要提供數組中的索引,然后數組根據索引將內存中的數據取出來,返回給讀取程序。只有相同類型的數據才可以一起存儲在數組中。
所有數據結構都支持幾個基本操作:讀取、插入、刪除
因為數組在存儲數據時是按順序存儲的,因為存儲內存是連續的,所以尋址讀取數據比較容易,插入和刪除比較困難。讀取數據時,只需要告訴數組從哪個索引讀取即可,數組會直接把需要位置的數據取出來。插入和刪除比較困難。插入位置后面所有內存中的數據都要往后移一個位置。非常耗時。
優點:較高的存儲效率和快速的隨機存取
缺點:數組不能動態的增長,並且在插入和刪除時,平均會移動n/2的數據,不適用於隨機位置插入和刪除很頻繁的操作
3、棧
棧是一種先進后出的數據結構,數組和鏈表都可以生成棧,當數據進入棧時會按照規則壓入到棧底部,再次進入的數據會壓到第一次的數據上面。在取出棧中數據的時候會先取出最上面的數據,先進后出。
隊列(queue)和棧是一種操作受限的線性表。棧的操作受限表現在插入和刪除只能對棧頂元素進行,刪除的元素永遠是最新插入的,即操作遵循后入先出(LIFO)原則。隊列中的操作原則與棧的相反。刪除的元素是最早插入到隊列中的,就像排隊一樣,排在最前面的人將最先從隊伍中出列。這樣的操作原則常常稱作先入先出。所以對於棧和隊列的頻繁隨機插入刪除不合適
4、隊列
隊列是一種先進先出的數據結構,數組和鏈表也可以生成隊列。
隊列(queue)和棧是一種操作受限的線性表。棧的操作受限表現在插入和刪除只能對棧頂元素進行,刪除的元素永遠是最新插入的,即操作遵循后入先出(LIFO)原則。隊列中的操作原則與棧的相反。刪除的元素是最早插入到隊列中的,就像排隊一樣,排在最前面的人將最先從隊伍中出列。這樣的操作原則常常稱作先入先出。所以對於棧和隊列的頻繁隨機插入刪除不合適