亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中ArrayList如何使用

發布時間:2021-07-01 15:22:38 來源:億速云 閱讀:177 作者:Leah 欄目:大數據

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

public void trimToSize()

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

java中ArrayList如何使用

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

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

java中ArrayList如何使用

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

java中ArrayList如何使用

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

ArrayList的構造器優化

看到上面的小標題可能有的人會問,ArrayList的構造器還能優化嗎?是的,確實能,上篇講到ArrayList的構造器有三個,其中有一個接收一個int類型值的構造器,而該構造器就是我們優化的重點。

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

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

以上就是java中ArrayList如何使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳原县| 施甸县| 平阴县| 正阳县| 祁东县| 怀仁县| 平度市| 许昌县| 阿荣旗| 邵东县| 洪洞县| 汉阴县| 武城县| 岳池县| 纳雍县| 萍乡市| 安阳市| 桃园市| 四子王旗| 昌吉市| 宜春市| 恩施市| 兴文县| 平湖市| 丁青县| 昭平县| 蚌埠市| 朝阳县| 易门县| 长宁区| 镇远县| 普兰店市| 浑源县| 宣恩县| 观塘区| 商水县| 工布江达县| 西藏| 大余县| 双桥区| 蒲城县|