下面列出了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有什么區別?》