參考:http://www.cnblogs.com/a164266729/p/4561651.html
(1)ArrayList是Array的復雜版本
ArrayList內部封裝了一個Object類型的數組,從一般的意義來說,它和數組沒有本質的差別,甚至於ArrayList的許多方法,如Index、IndexOf、Contains、Sort等都是在內部數組的基礎上直接調用Array的對應方法。
(2)存儲的數據類型
ArrayList可以存儲異構對象,而Array只能存儲相同數據類型的數據。
(3)長度的可變
Array的長度實際上是不可變的,二維變長數組實際上的長度也是固定的,可變的只是其中元素的長度。而ArrayList的長度既可以指定(即使指定了長度,也會自動2倍擴容)也可以不指定,是變長的。
(4)存取和增刪元素
對於一般的引用類型來說,這部分的影響不是很大,但是對於值類型來說,往ArrayList里面添加和修改元素,都會引起裝箱和拆箱的操作,頻繁的操作可能會影響一部分效率。另外,ArrayList是動態數組,它不包括通過Key或者Value快速訪問的算法,所以實際上調用IndexOf、Contains等方法是執行的簡單的循環來查找元素,所以頻繁的調用此類方法並不比你自己寫循環並且稍作優化來的快,如果有這方面的要求,建議使用Hashtable或SortedList等鍵值對的集合。
好了,關於這兩個數據結構的對比我們就到這里,如果有覺得不妥的地方,歡迎大家指正。
附Array和ArrayList的相互轉換:
public class Test { public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("王利虎"); list.add("張三"); list.add("李四"); int size=list.size(); String[] array = (String[])list.toArray(new String[size]); for(int i=0;i<array.length;i++){ System.out.println(array[i]); } } }
package test.test1; import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { String[] array=new String[3]; array[0]="王利虎"; array[1]="張三"; array[2]="李四"; List<String> list=Arrays.asList(array); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); } } }