测试身边故事系列:😈的java,ArrayList.removeAll小心

想都不用想,removeAll是时间复杂度是O(n2)的,恐怖呀。 我也是看我们产品一个过滤消息的代码为什么执行时间这么长,我才想起的。究竟有多恐怖,给大家点直观感受,举个例子:

创建一个这样的类


灌到一个listview里面

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

方法1:

传说中的removeall

方法2:

遍历一次完成

结果:

测试5次,第一次可能是刚启动android app,申请内存等缘故,时间特别长。哪怕把最大的两个值去掉,相差的倍数也不用我描述了吧。

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

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

想一想:

我之后去搜索了一下,确实有类似的文章说这个事情,文章内容也是很👍的。不过这一切没有超越我的常识,我一直也认为,java嘛,确实它的库本身的实现,在效率方面真的有待考量。例如上次被坑的string.split, 居然里面又是arraylist,又是正则的,频繁使用,也是大量gc;还有effective java推荐的stringbuilder,创建的时候不去填个长度的话,各种扩容,tostring之后各种gc,尽量不要new,把原来的delete来用吧,会好很多; 条数n多的用arraylist+范型和用数组的内存消耗也是天差地别。大家多留个心,特别是优化后期,或者性能瓶颈就在这些不起眼的地方了,也许你就是被字符串害死的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,360评论 11 349
  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 1,992评论 0 8
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 5,168评论 1 34
  • 住在城中村,便宜的租房价格,相应地,必须承受其他代价,比如垃圾遍地、噪音污染……而我现在正在经历的就是噪音污染。 ...
    Tinadar阅读 261评论 0 1
  • 我自帷幕走出灯光闪了不变的笑脸涂满的颜料似是嘲讽台下的欢呼震耳 搞怪的动作远不如你笑的滑稽你深以为滑稽的只有小丑 ...
    夏爅阅读 286评论 2 3