數組(Array)和列表(ArrayList)有什么區別?什么時候應該使用Array而不是ArrayList?


 

下面列出了Array和ArrayList的不同點:
Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。
Array大小是固定的,ArrayList的大小是動態變化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
對於基本類型數據,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。

 

ArrayList可以算是Array的加強版,(對array有所取舍的加強)。 

另附分類比較:

存儲內容比較:

  • Array數組可以包含基本類型和對象類型,
  • ArrayList卻只能包含對象類型。

但是需要注意的是:Array數組在存放的時候一定是同種類型的元素。ArrayList就不一定了,因為ArrayList可以存儲Object。

空間大小比較:

  • 它的空間大小是固定的,空間不夠時也不能再次申請,所以需要事前確定合適的空間大小。
  • ArrayList的空間是動態增長的,如果空間不夠,它會創建一個空間比原空間大約0.5倍的新數組,然后將所有元素復制到新數組中,接着拋棄舊數組。而且,每次添加新的元素的時候都會檢查內部數組的空間是否足夠。(比較麻煩的地方)。

  附上arraylist擴充機制:newCapacity=oldCapacity+(oldCapacity>>1)(注: >>1:右移1位,相當於除以2,例如10>>1 得到的就是5)但由於源碼里(不再分析,這里簡要略過)傳過來的minCapcatiy的值是size+1,能夠實現grow方法調用就肯定是(size+1)>elementData.length的情況,所以size就是初始最大容量或上一次擴容后達到的最大容量,所以才會進行擴容。因此,擴容后的大小應該是原來的1.5倍+1

方法上的比較: 
ArrayList作為Array的增強版,當然是在方法上比Array更多樣化,比如添加全部addAll()、刪除全部removeAll()、返回迭代器iterator()等。 

適用場景: 
如果想要保存一些在整個程序運行期間都會存在而且不變的數據,我們可以將它們放進一個全局數組里,但是如果我們單純只是想要以數組的形式保存數據,而不對數據進行增加等操作,只是方便我們進行查找的話,那么,我們就選擇ArrayList。而且還有一個地方是必須知道的,就是如果我們需要對元素進行頻繁的移動或刪除,或者是處理的是超大量的數據,那么,使用ArrayList就真的不是一個好的選擇,因為它的效率很低,使用數組進行這樣的動作就很麻煩,那么,我們可以考慮選擇LinkedList。arraylist和linkedlist的區別在哪里,什么時候使用,可以參考我的另一篇博客:《ArrayList和LinkedList有什么區別?》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM