真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中ArrayList如何使用

本篇文章給大家分享的是有關(guān)java中ArrayList如何使用,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場為導(dǎo)向”的快速反應(yīng)體系。對公司的主營項目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計、行業(yè) / 企業(yè)門戶設(shè)計推廣、行業(yè)門戶平臺運(yùn)營、成都App定制開發(fā)、手機(jī)網(wǎng)站制作、微信網(wǎng)站制作、軟件開發(fā)、成都多線機(jī)房等實行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從成都創(chuàng)新互聯(lián)可以獲得的服務(wù)效果。

public void trimToSize()

這個方法想必很多人都沒有用過甚至不一定知道ArrayList有這個方法,那么這個方法是做什么的呢?從該方法的介紹上可以得知該方法是將內(nèi)部的數(shù)組最小化,怎么最小化呢?就是當(dāng)前內(nèi)部如果數(shù)組長度是100,而實際使用的(放入的有數(shù)據(jù)的)只有10,那么使用這個方法后會重新申請一個長度為10的數(shù)組,然后將數(shù)據(jù)從原數(shù)組中復(fù)制過來,然后將這個新的長度為10的數(shù)組引用賦給ArrayList對象作為內(nèi)部數(shù)組,源碼如下:

java中ArrayList如何使用

如果你不是計算機(jī)專業(yè)的或者基礎(chǔ)不夠扎實的話可能會問:這么做有什么好處呢?那么這里我可以告訴你,這樣做的好處就是節(jié)省空間,因為如果內(nèi)部數(shù)組很大但是實際使用到的只有很少一部分的話,多余的那部分?jǐn)?shù)組空間雖然沒有存放東西,但是仍然是占用一定空間的,在有些內(nèi)存緊張的場景這個小優(yōu)化是很有必要的。同時根據(jù)源碼可以很容易得出該方法的時間漸進(jìn)復(fù)雜度是O(n),其中n與當(dāng)前ArrayList的size相同。

如果覺得文字不夠直觀的話,給大家上一段代碼,然后大家可以用jconsole觀察一下程序運(yùn)行時堆內(nèi)存的占用變化情況。

java中ArrayList如何使用

如果不會用jconsole又想看到結(jié)果的話我這里有運(yùn)行好的截圖,大家可以看一下,截圖如下:

java中ArrayList如何使用

可以看到在程序執(zhí)行到構(gòu)建ArrayList對象的時候堆內(nèi)存占用一下達(dá)到了1G多,而當(dāng)調(diào)用trimToSize方法后堆內(nèi)存又下降到了起始狀態(tài),因此在ArrayList擴(kuò)充到比較大的狀態(tài)后里邊的元素又被刪除了很多或者初始化ArrayList時構(gòu)建了一個比較大的內(nèi)部數(shù)組時(利用ArrayList的構(gòu)造器),調(diào)用trimToSize會明顯改善堆內(nèi)存的占用情況。但是,由于該方法的時間復(fù)雜度為O(n),其中n與ArrayList的size相關(guān),當(dāng)size比較大時該方法效率并不高,所以當(dāng)size較大而內(nèi)存又充足的情況或者ArrayList內(nèi)部數(shù)組的使用率比較高的情況下(size/內(nèi)部數(shù)組的長度,該值越大說明數(shù)組的使用率越高)不建議調(diào)用該方法,該方法也不建議頻繁調(diào)用。

ArrayList的構(gòu)造器優(yōu)化

看到上面的小標(biāo)題可能有的人會問,ArrayList的構(gòu)造器還能優(yōu)化嗎?是的,確實能,上篇講到ArrayList的構(gòu)造器有三個,其中有一個接收一個int類型值的構(gòu)造器,而該構(gòu)造器就是我們優(yōu)化的重點(diǎn)。

根據(jù)上節(jié)知識可以得出,ArrayList的add方法通常是比較高效的,可以在O(1)的時間內(nèi)完成,但是如果此時ArrayList內(nèi)部數(shù)組的長度不夠需要擴(kuò)容時,就需要調(diào)用grow方法擴(kuò)容了,而該方法的時間漸進(jìn)復(fù)雜度是O(n),其中n與當(dāng)前size有關(guān),所以該方法相對來說是比較低效的(實際在算法的世界O(n)的時間復(fù)雜度通常是比較高效的),那么如何減少該方法的調(diào)用次數(shù)就成了優(yōu)化ArrayList性能的一個關(guān)鍵問題。

想要減少grow方法的調(diào)用,首先要知道在什么時候grow方法會被調(diào)用,而在前面我們已經(jīng)說過,在需要擴(kuò)容,也就是當(dāng)前ArrayList內(nèi)部維護(hù)的數(shù)組長度不夠的時候,該方法會被調(diào)用,那么如果我們的ArrayList內(nèi)部維護(hù)的那個數(shù)組長度一直夠用,我們不就不需要調(diào)用這個方法了嗎?實際上,這種想法是可行的,因為我們可以通過ArrayList的構(gòu)造器去控制ArrayList內(nèi)部維護(hù)的這個數(shù)組的初始大小,而如果我們精確的知道我們將要往ArrayList中放入多少數(shù)據(jù),那么我們就可以直接通過ArrayList的構(gòu)造器去指定ArrayList內(nèi)部維護(hù)的這個數(shù)組的初始大小,即使我們不確定我們創(chuàng)建的ArrayList對象將要放入多少數(shù)據(jù),我們也可以估算一個相對較大的值,然后使用該值去構(gòu)建ArrayList,以此達(dá)到盡量少的調(diào)用grow方法。

以上就是java中ArrayList如何使用,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享名稱:java中ArrayList如何使用
URL標(biāo)題:http://weahome.cn/article/ipccej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部