一、數(shù)組與ArrayList的主要區(qū)別:效率、類型識(shí)別和primitive type。
數(shù)組([]):最高效;但是其容量固定且無法動(dòng)態(tài)改變;
ArrayList:容量可動(dòng)態(tài)增長(zhǎng);但犧牲效率;
建議:
首先使用數(shù)組,無法確定數(shù)組大小時(shí)才使用ArrayList!
1.效率:
數(shù)組擴(kuò)容是對(duì)ArrayList效率影響比較大的一個(gè)因素。
每當(dāng)執(zhí)行Add、AddRange、Insert、InsertRange等添加元素的方法,都會(huì)檢查內(nèi)部數(shù)組的容量是否不夠了,如果是,它就會(huì)以當(dāng)前容量的兩倍來重新構(gòu)建一個(gè)數(shù)組,將舊元素Copy到新數(shù)組中,然后丟棄舊數(shù)組,
在這個(gè)臨界點(diǎn)的擴(kuò)容操作,應(yīng)該來說是比較影響效率的。
ArrayList是Array的復(fù)雜版本
ArrayList內(nèi)部封裝了一個(gè)Object類型的數(shù)組,從一般的意義來說,它和數(shù)組沒有本質(zhì)的差別,甚至于
ArrayList的許多方法,如Index、IndexOf、Contains、Sort等都是在內(nèi)部數(shù)組的基礎(chǔ)上直接調(diào)用Array的對(duì)應(yīng)方法。
2.類型識(shí)別:
ArrayList存入對(duì)象時(shí),拋棄類型信息,所有對(duì)象屏蔽為Object,編譯時(shí)不檢查類型,但是運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。
注:jdk5中加入了對(duì)泛型的支持,已經(jīng)可以在使用ArrayList時(shí)進(jìn)行類型檢查。
從這一點(diǎn)上看來,ArrayList與數(shù)組的區(qū)別主要就是由于動(dòng)態(tài)增容的效率問題了
3.ArrayList可以存任何Object,如String,Employee等,但不支持基本數(shù)據(jù)類型,除非使用wrapper。
二、數(shù)組與ArrayList的轉(zhuǎn)換(有待補(bǔ)充:見《corejava》110頁(yè))
1.ArrayList轉(zhuǎn)換為數(shù)組:
ArrayList轉(zhuǎn)換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.數(shù)組轉(zhuǎn)換為ArrayList(有待補(bǔ)充)
三、Arrays類操縱java中的數(shù)組(有待補(bǔ)充)
http://java.ccidnet.com/art/3737/20060627/589715_1.html
四、實(shí)現(xiàn)DecisionTree時(shí)對(duì)ArrayList與String[]的迷惑與解鈴(有待補(bǔ)充)
http://www.mysdn.cn/Java/J2SEjichulei/20060914/9172.html
(實(shí)際為數(shù)組與ArrayList的迷惑)
五、其他
1.數(shù)組和ArrayList都表示可以存一組同類型的對(duì)象;都使用下標(biāo)定位和查找元素;
2.數(shù)組的定義:
int[] num=new int[10];
Employee[] staff=new Employee[100];
3.ArrayList的使用:
List lst=new ArrayList();
lst.add(employee);
4.起初并沒有Arrays類(??不記得在哪看到了,不確定),Arrays類是為了方便數(shù)組的一些常用的共同
操作而實(shí)現(xiàn)的。
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