陣列和鍊錶的區別

2021-07-26 12:20:43 字數 944 閱讀 5176

1、陣列的儲存空間是一大片連續的,鍊錶的儲存空間是不定的,每個鍊錶的節點元素都會儲存該節點的資料和下個節點的位址指向。陣列初使化必須制定大小,而鍊錶卻不需要便是這個原因。

2、就增刪改查而言,陣列因為位址是連續的,所以陣列的查詢修改很快,但是增刪的時候由於需要移動後面所有的元素反而較慢,對應的鍊錶在查詢的時候由於需要從第乙個元素開始,直到找到你想要的元素,反而在增刪的時候只需要修改對應節點的指標就可以了。

陣列靜態分配記憶體,鍊錶動態分配記憶體;

陣列在記憶體中連續,鍊錶不連續;

陣列元素在棧區,鍊錶元素在堆區;

陣列利用下標定位,時間複雜度為o(1),鍊錶定位元素時間複雜度o(n);

陣列插入或刪除元素的時間複雜度o(n),鍊錶的時間複雜度o(1)。

常用的arraylist使用的是陣列實現,linkedlist使用的是鍊錶實現。

arraylist類:

contains方法只能判斷儲存在棧裡的資料。依賴於indexof方法。

indexof方法是用來獲取指定元素在集合裡的位置,-1時表示集合了不存在。但是值得注意的一點是,indexof方法是通過遍歷集合用equals方法來決定兩個值是否相等的,注意indexof方法傳入引數的類的equals實現,比如說如果繼承的類包括自己都沒重寫object的equals方法的,則只是比較位址,但是當類似於string的時候就會比較裡面的值了,以為string重寫了equals方法,回去判斷值是否相等,而不是簡單的比較物件的位址。

arraylist在增加乙個元素的時候,如果原來的大小不夠了,會去擴容當前大小的一半,當增加乙個集合的時候,也會去算增加一半夠不夠,不夠就直接加上增加集合的大小。arraylist在增加乙個元素的時候會通過system.arraycopy(elementdata, index, elementdata, index + 1,size - index);來複製後面的元素後移。

陣列和鍊錶區別

談到鍊錶與陣列的區別,可以從幾個不同的角度來談,首先從邏輯結構上說,兩者都是資料結構的一種,但存在區別,陣列是申請的一塊連續的記憶體空間,並且是在編譯階段就要確定空間大小的,同時在執行階段是不允許改變的,所以它不能夠隨著需要的改變而增加或減少空間大小,所以當資料量大的時候,有可能超出了已申請好的陣列...

陣列和鍊錶的區別

陣列與鍊錶的區別 1.基於空間的考慮 陣列的儲存空間是靜態,連續分布的,估計過大造成空間浪費,估計太小又將使空間溢位機會增多。而鍊錶的儲存空間是動態分布的,只要記憶體空間尚有空閒,就不會產生溢位 鍊錶中每個節點除了資料域外,還有指標域,儲存密度小於1 陣列為 儲存空間利用率就越高。2.基於時間的考慮...

陣列和鍊錶的區別

陣列優點 1 陣列記憶體空間占用的較少,而鍊錶節點會附加上一塊或兩塊下乙個節點的資訊,所以占用記憶體較多。但是陣列在建立時就固定了,所以也有可能會因為建立的陣列過大或不足引起記憶體上的問題.2 陣列內的資料可隨機訪問,但鍊錶不具備隨機訪問性。陣列在記憶體裡是連續的空間,比如乙個陣列位址從1到 100...