AraryList學習總結
AraryList學習總結
在大多數的計算機語言中,我們在申明一個數組的時候必須首先固定數組的大小,否則編譯會出錯,但是在很多時候,我們事先并不能確定數組的大小,這時為了保證程序能夠順利的運行我們可能不得不盡量將數組的長度定的很大,這樣當數組的實際長度比較小時,就會浪費掉很多資源。為了解決在程序運行時動態改變數組大小地問題,在java中提供了這樣一個類ArrayList,它能夠實現與數組同樣的功能,并能夠動態地改變大小,就像一個能夠自己伸縮的容器一樣,如氣球,呵呵。
1. 工作原理
在ArrayList有一個內部數組,專門用來存放放在ArrayList中的對象的reference。我
們不斷調用ArrayList的add(Object object)方法增加對象,最終那個內部數組會full,這個時候“神奇”發生了,ArrayList會自動創建一個更大的內部數組把那些references從較小的數組中拷貝過來同時把要add的那個對象也塞進去,當然這樣會引起額外的開銷。
從這個原理來看,我認為在使用ArrayList的時候最好在構造它的時候指定一個初始容量或者通過調用ensureCapacity(int i)指定一個容易,這樣在達到預設的容量之前,都不會有額外的開銷,否則的話每增加一個新的對象都會引起額外的開銷。當ArrayList的大小(size)不會再發生變化時,我們可以調用ArrayList的trimToSize()方法來降低ArrayList的存儲容量至其實際存儲容量(即size的大小)。打個比方,我們初始化一個ArrayList時指定了其容量為100,但最終它只存放了60個對象,這個時候通過調用trimToSize()方法,就可以剛好把存儲空間調整為存放60個對象所需的大小,多余的空間將由垃圾回收器負責回收。請注意,只有當你確定ArrayList的大小(size)不再變化的時候才調用trimToSize()方法,否則,當你再增加新的對象就會引起額外的開銷。
2. 操作ArrayList
在ArrayList被構造好之后,我們就可以利用它的方法對其中的對象進行操作了,包括
增刪改查等等。通過使用泛型,我們可以很好的把ArrayList靈活的增長性和數組方便的存取訪問結合起來。例如,我聲明了一個泛型,ArrayList<Stirng> test =new ArrayList<String>();在通過add方法加入了若干個String對象后,就可以通過如下代碼把其轉化為一個String數組:String str[]=new String[test.size()];test.toArray(str)。這樣test中的元素都到str中了,可以很方便的存取了。(注:泛型是JDK5.0的新特性,以后會專門單獨學習總結)
本貼來自ZDNetChina中文社區 http://bbs.zdnet.com.cn ,本貼地址:http://bbs.zdnet.com.cn/viewthread.php?tid=226817