關於數組和arraylist的隨筆

查看array和arraylist的源碼發現arraylist是在array的基礎上擴展過來的,在arraylist的add等操作方法中使用的長度判斷和增加長度後拷貝原array的處理方法。這就嚴重影響力arraylist的速度。所以在使用有固定長度的對象的時候一般使用array來提高速度。

下面是百度上找到一些相關的知識點:

一、數組與ArrayList的主要區別:效率、類型識別和primitive type。
數組([]):最高效;但是其容量固定且無法動態改變;
ArrayList:容量可動態增長;但犧牲效率;
建議:
首先使用數組,無法確定數組大小時才使用ArrayList!


1.效率:
數組擴容是對ArrayList效率影響比較大的一個因素。
每當執行Add、AddRange、Insert、InsertRange等添加元素的方法,都會檢查內部數組的容量是否不夠了,如果是,它就會以當前容量的兩倍來重新構建一個數組,將舊元素Copy到新數組中,然後丟棄舊數組,

在這個臨界點的擴容操作,應該來說是比較影響效率的。

ArrayList是Array的複雜版本
ArrayList內部封裝了一個Object類型的數組,從一般的意義來說,它和數組沒有本質的差別,甚至於

ArrayList的許多方法,如Index、IndexOf、Contains、Sort等都是在內部數組的基礎上直接調用Array的對應方法。

2.類型識別:
ArrayList存入對象時,拋棄類型信息,所有對象屏蔽爲Object,編譯時不檢查類型,但是運行時會報錯。

注:jdk5中加入了對泛型的支持,已經可以在使用ArrayList時進行類型檢查。

從這一點上看來,ArrayList與數組的區別主要就是由於動態增容的效率問題了


3.ArrayList可以存任何Object,如String,Employee等,但不支持基本數據類型,除非使用wrapper。

二、數組與ArrayList的轉換(有待補充:見《corejava》110頁)
1.ArrayList轉換爲數組:
ArrayList轉換String[]
ArrayList list = new ArrayList();list.add("a");list.add("b");list.add

("c");System.out.println("a="+list);String[] b=(String[])list.toArray

(new String[0]);

2.數組轉換爲ArrayList(有待補充)

三、Arrays類操縱java中的數組(有待補充)
http://java.ccidnet.com/art/3737/20060627/589715_1.html

四、實現DecisionTree時對ArrayList與String[]的迷惑與解鈴(有待補充)

http://www.mysdn.cn/Java/J2SEjichulei/20060914/9172.html

(實際爲數組與ArrayList的迷惑)

五、其他
1.數組和ArrayList都表示可以存一組同類型的對象;都使用下標定位和查找元素;
2.數組的定義:
int[] num=new int[10];
Employee[] staff=new Employee[100];

3.ArrayList的使用:
List lst=new ArrayList();
lst.add(employee);

4.起初並沒有Arrays類(??不記得在哪看到了,不確定),Arrays類是爲了方便數組的一些常用的共同

操作而實現的。

5.ArrayList詳解:
http://my.opera.com/wujianrong/blog/index.dml/tag/ArrayList

http://blog.csdn.net/realasker/

6.J2SE 5.0中的泛型
http://www.javanb.com/j2se/1/5246.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章