【Java基礎知識】Java陣列與集合

ii_chengzi發表於2020-05-19

在java中我們可以用陣列或者集合將一些資料集中起來進行管理,但是資料和集合也有一些不同的特點;

當我們建立陣列的時候,我們需要指定陣列的大小,也就是需要說明這個資料可以存多少資料,並且指定所存資料的型別,比如我們要存int型別或者其他型別的,當我們規定好儲存的大小和型別之後,程式會為我們在記憶體中開闢一塊連續的儲存空間,並且只能儲存我們之前規定的資料型別,不可以存放其他型別;使用陣列的時候,我們修改和獲取陣列裡面的內容速度會很快,但是因為分配的記憶體是連續的,當我們需要在中間插入一個資料的時候,需要將後面的資料一個一個的往後移動,然後在插入的位置儲存需要插入的值,這樣插入效率就會比較低了;

在java中集合List是一個介面,常用的實現List的類有ArrayList,LinkList,Vector;這三個底層的實現也是有不同的區別;

ArrayList底層的實現是動態陣列,所以ArrayList對於資料的查詢,效率會比較高,但是對於資料的插入效率會比較低;

【Java基礎知識】Java陣列與集合

LinkList底層的實現是雙向連結串列,連結串列的實現原理是一個節點連線著下一個節點,所以一個連結串列在記憶體中的地址並不是連續的,當我們需要在第N個位置之後插入一個資料的時候,程式可以在空閒的記憶體中將資料儲存,然後將這個資料的下一個節點指向第N個位置的下一個節點,然後重新將第N個位置資料的下一個位置指向新建立的資料,這樣就將新的資料插入到了連結串列中,這種形式不需要移動插入位置的後邊資料,僅僅只是修改了節點的指向,所以連結串列插入效率會比較高,但是如果要查詢的時候,就需要從頭結點往後一個一個的查詢,知道找到所要查詢的資料,所以連結串列的查詢效率相對比較低了;

Vector的實現也是基於資料實現的(類似ArrayList),但是他與ArrayList不同的點在於,Vector是執行緒安全的,所以在效率方面會比ArrayList低一些;

雖然ArrayList是基於資料實現的,但是陣列一旦確定大小之後,以後是不可以再次修改儲存資料量大小的,但是ArrayList並沒有大小的限制,他是基於資料進行動態擴容的,所以效率方面陣列的效率相對於ArrayList高一些;

在我們開發中,如果確定空間大小的,我們可以使用資料來進行儲存,如果不確定大小的資料可以使用List進行儲存資料;然後根據資料查詢頻率和增刪頻率的不同,可以選擇ArrayList和LinkList;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2692924/,如需轉載,請註明出處,否則將追究法律責任。

相關文章