測試身邊故事系列:??的java,ArrayList.removeAll小心

想都不用想,removeAll是時間復(fù)雜度是O(n2)的,恐怖呀。 我也是看我們產(chǎn)品一個過濾消息的代碼為什么執(zhí)行時間這么長,我才想起的。究竟有多恐怖,給大家點直觀感受,舉個例子:

創(chuàng)建一個這樣的類


灌到一個listview里面

如果我要刪掉arraylist里面的,屬性b填的是“bb”的。要怎么做。

方法1:

傳說中的removeall

方法2:

遍歷一次完成

結(jié)果:

測試5次,第一次可能是剛啟動android app,申請內(nèi)存等緣故,時間特別長。哪怕把最大的兩個值去掉,相差的倍數(shù)也不用我描述了吧。

方法1:1202ms? 751ms ? 333ms ? 337ms ?306ms

方法2: ? 3ms ?6ms ?1ms ?2ms ?2ms

想一想:

我之后去搜索了一下,確實有類似的文章說這個事情,文章內(nèi)容也是很??的。不過這一切沒有超越我的常識,我一直也認為,java嘛,確實它的庫本身的實現(xiàn),在效率方面真的有待考量。例如上次被坑的string.split, 居然里面又是arraylist,又是正則的,頻繁使用,也是大量gc;還有effective java推薦的stringbuilder,創(chuàng)建的時候不去填個長度的話,各種擴容,tostring之后各種gc,盡量不要new,把原來的delete來用吧,會好很多; 條數(shù)n多的用arraylist+范型和用數(shù)組的內(nèi)存消耗也是天差地別。大家多留個心,特別是優(yōu)化后期,或者性能瓶頸就在這些不起眼的地方了,也許你就是被字符串害死的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,793評論 11 349
  • 相關(guān)概念 面向?qū)ο蟮娜齻€特征 封裝,繼承,多態(tài).這個應(yīng)該是人人皆知.有時候也會加上抽象. 多態(tài)的好處 允許不同類對...
    東經(jīng)315度閱讀 2,192評論 0 8
  • 《深入理解Java虛擬機》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,471評論 1 34
  • 住在城中村,便宜的租房價格,相應(yīng)地,必須承受其他代價,比如垃圾遍地、噪音污染……而我現(xiàn)在正在經(jīng)歷的就是噪音污染。 ...
    Tinadar閱讀 271評論 0 1
  • 我自帷幕走出燈光閃了不變的笑臉涂滿的顏料似是嘲諷臺下的歡呼震耳 搞怪的動作遠不如你笑的滑稽你深以為滑稽的只有小丑 ...
    夏爅閱讀 300評論 2 3

友情鏈接更多精彩內(nèi)容