android集合优化,android-性能优化之集合类优化

优化包括:I/O的优化、网络操作的优化、内存的优化、数据结构的优化、代码层次的优化、UI渲染优化、CPU资源使用率的优化、异常处理的优化等

》ArrayList和Vector

ArrayList和Vector都是内部以数组实现的List,它们两唯一的区别就是对多线程的支持,ArrayList是线程不安全的,而Vector内部对大多数方法都做了同步,是线程安全的,既然是线程安全的,所以性能方面肯定不如ArrayList了(当然想法肯定是对的),不过这需要看哪方面了,ArrayList在add、get、remove等操作效率肯定是高于Vector的,而在内存方面,Vector却比ArrayList表现的更好,这归根都是ArrayList的扩容策略导致的

List集合的遍历方式,有三种:foreach、iterator、for。

》三种方式测试遍历有100w条数据的ArrayList集合:

fori花费30;foreach花费:105;iterator花费:95

而通常我们所说的效率高的foreach在遍历上却显得不如意,而fori效率表现的最好,这是因为ArrayList和Vector集合内部实现由数组实现,所以随机访问的速度是很快的,对于可以进行随机访问的List,JDK为它们实现了RandomAccess接口,表示支持快速随机访问。

》而在遍历有1w条数据的LinkedList集合时:

fori花费:351

foreach花费:2

iterator花费:4

则foreach表现最佳,所以对数组、或者实现了RandomAccess接口的List,遍历用fori性能最佳,对LinkedList等以链表实现的集合遍历时使用foreach或者iterator性能最佳,因为foreach的实现就是通过iterator实现的。

。ArrayList内部的扩容策略是当其所存储的元素数量超过它已有的大小时,它就会以1.5倍的容量进行扩容;

。在众多Map集合中也有各自扩容策略,比如HashMap每次扩容时新容量等于原始的容量*2。在我们常用做字符串拼接的StringBuffer和StringBuilder内部,实际上也是有扩容策略,默认为扩容为原始的1.5倍。

》优先考虑系统中提供的代码而不是自己写

系统内置了许多非常方便的api供我们使用,比如:System、Arrays、Collections、String等内置了许多方法api,这比我们自己手写方便多了,除了这个外,对于Android来说许多api都使用了底层C/C++实现,所以效率上也比我们自己写快,同样,对于系统api,DVM往往也会使用内联的方式提高效率。

》慎用异常

慎用异常并不是不用异常,而是指程序中用抛异常的方式来执行某些操作,比如有些人会以强抛异常方式来中断某些操作等。因为抛异常时都会执行fillInStackTrace();方法,该方法作用就是重新调整堆栈,这使得没有必要用异常的地方一定要避免使用

》如果一个方法不需要使用该对象的成员,那么把该方法设为static;巧用final关键字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle之数据处理之其他数据库对象

--创建序列 create sequence empseq increment by 10---每次增长10 start with 10--从10开始 maxvalue 100--提供最大值 cycle --循环 nocache --不需要缓存登录 运行结果 --查看 查看 select empseq.nextval from dual 运行结果 --创建表 create table emp11 as select empl…

android 线程太多,应用程序可能在其主线程上做了太多的工作。

任何开始开发android应用程序的人都会在logcat上看到这个消息。编舞(ABC):跳过xx帧!应用程序可能在其主线程上做了太多的工作。“那么,它到底意味着什么,你为什么要关心它,以及如何解决它。这意味着您的代码需要很长时…

关于Docker官方CentOS镜像无法启动mysqld的总结

很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动。 无法正常启动表现为两种情况: 1> 初始完数据库后,mysqld启动报错 2> systemctl start mysqld或者service mysqld start报错 首先重现一下现场。…

oracle之数据处理之其他数据库对象练习

1. 创建序列dept_id_seq,开始值为200,每次增长10,最大值为10000 a) create sequence dept_id_seq b) start with 200 c) increment by 10 d) maxvalue 10000 2. 使用序列向表dept中插入数据 a) insert into dept01 b) values(dept_id_seq.nex…

android 刷rom,刷ROM是什么?刷ROM是什么意思?

刷ROM是什么意思首先,ROM是由英文Read only Memory的首字母构成的,意为只读存储器。顾名思义,就是这样的存储器只能读,不能像RAM一样可以随时读和写。它只允许在生产出来之后有一次写的机会,数据一旦写入则不可更改。它…

网站

Json解析:http://json.tongxiehui.net/ MD5破解:http://www.cmd5.com/转载于:https://www.cnblogs.com/Eazy/p/4840789.html

oracle之set运算符和练习

--创建表 create table emp01 as select * from employees where department_id in (70,80)-- --创建表 create table emp02 as select * from employees where department_id in (80,90) --查询 --并集 select * from employees where department_id in (70,80) union all se…

html自动加https,http自动跳转https的配置方法

IIs中实现Http自动转换到Https方法介绍 (403跳转对SEO有一定影响)1.下载安装URL重写模块:Microsoft URL Rewrite Module32位:http://download.microsoft.com/download/4/9/C/49CD28DB-4AA6-4A51-9437-AA001221F606/rewrite_x86_zh-CN.msi64位&#xff1a…

活动页面html设计,活动查看页面.html

活动查看页面$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html…

《程序员在第一季度追姐姐的书》——提升自己的形象气质

去年,许久没有联系我的高中女同学;突然给我发来了QQ消息。丝毫不犹豫的点击开她的QQ空间。这家伙都已经变成大美女了。。此处省去一万字..... 原来是找我给她p图来了。。一看她的QQ空间里面的说说,这才得知原来妹子已经恢复单身啦&#xff0c…

oracle之高级子查询1

--子查询 查询last_name为chen的manager信息select employee_id,last_name from employees where employee_id( select manager_id from employees where last_nameChen ) 运行结果 --查询 select employee_id,manager_id,department_id from employees where manager_id in( …

intp适合学计算机吗,⑨MBTI测试,分析INTP型人格的专业选择和职业选择

原标题:⑨MBTI测试,分析INTP型人格的专业选择和职业选择在MBTI职业性格测试中,INTP型人格,沉默、自主、思维敏捷、自主性强,对理论和科学有自己的追求。喜欢提出新主张,也爱用逻辑去分析问题,为…

STL学习笔记(仿函数)

仿函数(Functors) 仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。 例如我们定义一个类: class X{public:return-value operator()(arg…

郸城二高2021年高考成绩查询时间,河南高考最高分是谁,2021年河南高考状元名单分数学校...

每年的高考状元是广大考生、家长以及老师最关注的事情,2021年河南高考状元是谁,以下是小编整理的历年河南高考状元,仅供参考。一、2021年河南高考状元名单2021年河南高考状元暂未公布,小编会持续关注并及时更新。二、2020年河南高…

使用NuGet发布自己的类库包(Library Package)

http://www.cnblogs.com/daxnet/archive/2013/05/07/3064577.html 转载于:https://www.cnblogs.com/shiningrise/p/4842367.html

减少GC开销的5个编码技巧

在这篇文章中,我们来了解一下让代码变得高效的五种技巧,这些技巧可以使我们的垃圾收集器(GC)在分配内存以及释放内存上面,占用更少的CPU时间,减少GC的开销。当内存被回收的时候,GC处理很长时间经…

HTML5DOM红蓝盒子,DOM介绍以及使用方法(示例代码)

DOM的基本讲解一、DOM(Document Object Model)文档对象模型1、有属性有方法1 var person {2 name:‘派大星‘,3 fav:function(){4 }5 }2、js中对象分类三种(1)用户定义对象(2)内建对象 Array Date Math (内置)(3)宿主对象3、Model Map(地图)(1)把 DOM 看做一颗“树”(2)DOM 把文…